diff --git a/.editorconfig b/.editorconfig index fd58ff70..81587b6d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -16,5 +16,4 @@ indent_size = 2 trim_trailing_whitespace = false [package.json] -indent_style = space -indent_size = 2 \ No newline at end of file +indent_size = 2 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..7ea4595f --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,8 @@ +# This is a comment. +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# @global-owner1 and @global-owner2 will be requested for +# review when someone opens a pull request. +* @nodejs/github-bot diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..774051b2 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 10 + - package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 10 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..62223d6e --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,7 @@ +name: Test + +on: [push, pull_request] + +jobs: + tests: + uses: pkgjs/action/.github/workflows/node-test.yaml@v0 diff --git a/.gitignore b/.gitignore index e1a1e2f8..8be30955 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ npm-debug.log .DS_Store .env .vscode +.nyc_output +.tap +coverage diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9ecbf0be..00000000 --- a/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -sudo: false -language: node_js -node_js: - - 6 diff --git a/README.md b/README.md index d811b4c6..5ee4b2b8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Node.js GitHub Bot -The Node.js Foundation's uses this bot to help manage [the repositories of the GitHub organization](https://github.com/nodejs). +The Node.js Foundation members use this bot to help manage [the repositories of the GitHub organization](https://github.com/nodejs). It executes [scripts](https://github.com/nodejs/github-bot/tree/master/scripts) in response to events that are pushed to it via GitHub webhooks. All [repositories](https://github.com/nodejs) that use this bot have the same webhook url & secret configured (there is only 1 bot instance). Org-wide webhooks are not allowed. @@ -42,18 +42,22 @@ The bot will try to load a `.env` file at the root of the project if it exists t ``` GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -SSE_RELAY=https://hook-relay.herokuapp.com +SSE_RELAY=https://hook-relay.example.com ``` **Note the additional `SSE_RELAY` variable:** When developing locally, it is difficult to setup a GitHub webhook pointing to the computer you are developing on. An easy workaround is to set the `SSE_RELAY` to the url of [a SSE relay server](https://github.com/williamkapke/hook-relay) that will send the GitHub events via -[Server Sent Events](http://www.html5rocks.com/en/tutorials/eventsource/basics/) instead. +[Server Sent Events](http://www.html5rocks.com/en/tutorials/eventsource/basics/) instead. Another option +is to use [ngrok](https://ngrok.com/). You can use the [TestOrgPleaseIgnore](https://github.com/TestOrgPleaseIgnore) GitHub Organization, to test your changes. Actions performed on the repos there will be sent to -[the SSE Relay](https://github.com/williamkapke/hook-relay). +[the SSE Relay](https://github.com/williamkapke/hook-relay). If you use your own Organization/Repository, +remember to set the webhook Secret to the same value as `GITHUB_WEBHOOK_SECRET` (default `hush-hush`), and +to change the content type to `application/json` (default on the GitHub interface is +`application/x-www-form-urlencoded`, which will not work with the bot). The `GITHUB_WEBHOOK_SECRET` environment variable is not required when using the relay. diff --git a/app.js b/app.js index fc9f6f5f..9ac062f1 100644 --- a/app.js +++ b/app.js @@ -1,20 +1,20 @@ 'use strict' -require('dotenv').load({ silent: true }) +import express from 'express' +import bodyParser from 'body-parser' +import bunyanMiddleware from 'bunyan-middleware' +import AsyncEventEmitter from 'events-async' -const glob = require('glob') -const express = require('express') -const bodyParser = require('body-parser') -const bunyanMiddleware = require('bunyan-middleware') - -const logger = require('./lib/logger') -const authMiddleware = require('./lib/auth-middleware') +import logger from './lib/logger.js' +import authMiddleware from './lib/auth-middleware.js' +import githubEvents from './lib/github-events.js' +import jenkinsEvents from './lib/jenkins-events.js' const captureRaw = (req, res, buffer) => { req.raw = buffer } -const app = express() +export const app = express() +export const events = new AsyncEventEmitter() -const scriptsToLoad = process.env.SCRIPTS || './scripts/**/*.js' const logsDir = process.env.LOGS_DIR || '' app.use(bodyParser.json({ verify: captureRaw })) @@ -24,24 +24,17 @@ if (logsDir) { } // bunyanMiddleware gives us request id's and unique loggers per incoming request, -// for satefy reasons we don't want to include the webhook GitHub secret in logs +// for safety reasons we don't want to include the webhook GitHub secret in logs app.use(bunyanMiddleware({ logger, level: 'trace', obscureHeaders: ['x-hub-signature'] })) -require('./lib/github-events')(app) - -// load all the files in the scripts folder -glob.sync(scriptsToLoad).forEach((file) => { - logger.info('Loading:', file) - require(file)(app) -}) +githubEvents(app, events) +jenkinsEvents(app, events) app.use(function logUnhandledErrors (err, req, res, next) { logger.error(err, 'Unhandled error while responding to incoming HTTP request') res.status(500).end() }) - -module.exports = app diff --git a/lib/auth-middleware.js b/lib/auth-middleware.js index 80e70480..81d7b550 100644 --- a/lib/auth-middleware.js +++ b/lib/auth-middleware.js @@ -1,5 +1,3 @@ -'use strict' - /** * Routes using this middleware gets HTTP basic authentication. * There's only support for *one* username and password combination, @@ -7,18 +5,16 @@ * in the follow format: "username:password" */ -const auth = require('basic-auth') - -const pkg = require('../package') +import auth from 'basic-auth' -const [ username, password ] = (process.env.LOGIN_CREDENTIALS || '').split(':') +const [username, password] = (process.env.LOGIN_CREDENTIALS || '').split(':') -module.exports = function authMiddleware (req, res, next) { +export default function authMiddleware (req, res, next) { const user = auth(req) - if (user === undefined || user['name'] !== username || user['pass'] !== password) { + if (user === undefined || user.name !== username || user.pass !== password) { res.statusCode = 401 - res.setHeader('WWW-Authenticate', `Basic realm="${pkg.name}"`) + res.setHeader('WWW-Authenticate', 'Basic realm="nodejs-github-bot"') res.end('Unauthorized') } else { next() diff --git a/lib/bot-username.js b/lib/bot-username.js deleted file mode 100644 index fa726e75..00000000 --- a/lib/bot-username.js +++ /dev/null @@ -1,14 +0,0 @@ -const memoize = require('async').memoize - -const githubClient = require('./github-client') - -function requestGitHubForUsername (cb) { - githubClient.users.get({}, (err, currentUser) => { - if (err) { - return cb(err) - } - cb(null, currentUser.login) - }) -} - -exports.resolve = memoize(requestGitHubForUsername) diff --git a/lib/github-client.js b/lib/github-client.js index 76f39443..05ca43fc 100644 --- a/lib/github-client.js +++ b/lib/github-client.js @@ -1,20 +1,11 @@ -'use strict' +import { Octokit } from '@octokit/rest' -const GitHub = require('github') - -const githubClient = new GitHub({ - version: '3.0.0', - protocol: 'https', - host: 'api.github.com', - timeout: 5 * 1000, - headers: { - 'user-agent': 'Node.js GitHub Bot v1.0-beta' +const githubClient = new Octokit({ + auth: process.env.GITHUB_TOKEN || 'invalid-placeholder-token', + userAgent: 'Node.js GitHub Bot v1.0-beta', + request: { + timeout: 5 * 1000 } }) -githubClient.authenticate({ - type: 'oauth', - token: process.env.GITHUB_TOKEN || 'invalid-placeholder-token' -}) - -module.exports = githubClient +export default githubClient diff --git a/lib/github-comment.js b/lib/github-comment.js new file mode 100644 index 00000000..e038c543 --- /dev/null +++ b/lib/github-comment.js @@ -0,0 +1,17 @@ +/* eslint-disable camelcase */ + +import githubClient from './github-client.js' + +export async function createPrComment ({ owner, repo, issue_number, logger }, body) { + try { + await githubClient.issues.createComment({ + owner, + repo, + issue_number, + body + }) + } catch (err) { + logger.error(err, 'Error while creating comment on GitHub') + throw err + } +} diff --git a/lib/github-events.js b/lib/github-events.js index b4bd6b9b..6b6d46fa 100644 --- a/lib/github-events.js +++ b/lib/github-events.js @@ -1,9 +1,11 @@ -const debug = require('debug')('github-events') +import debugLib from 'debug' -const githubSecret = require('./github-secret') +import * as githubSecret from './github-secret.js' -module.exports = (app) => { - app.post('/hooks/github', (req, res) => { +const debug = debugLib('github-events') + +export default (app, events) => { + app.post('/hooks/github', async (req, res) => { const event = req.headers['x-github-event'] if (!event) { res.writeHead(400, 'Event Header Missing') @@ -19,9 +21,15 @@ module.exports = (app) => { const data = req.body data.action = data.action ? event + '.' + data.action : event - res.end() + try { + await app.emitGhEvent(data, req.log) + res.status(200) + } catch (err) { + req.log.error(err, 'Error while emitting GitHub event') + res.status(500) + } - app.emitGhEvent(data, req.log) + res.end() }) app.emitGhEvent = function emitGhEvent (data, logger) { @@ -45,6 +53,6 @@ module.exports = (app) => { data.logger.info('Emitting GitHub event') debug(data) - app.emit(data.action, data, org, repo, data.sender.login) + return events.emit(data.action, data, org, repo, data.sender.login) } } diff --git a/lib/github-secret.js b/lib/github-secret.js index ab9f444d..1aecacc1 100644 --- a/lib/github-secret.js +++ b/lib/github-secret.js @@ -1,4 +1,4 @@ -const crypto = require('crypto') +import crypto from 'node:crypto' const secret = process.env.GITHUB_WEBHOOK_SECRET || 'hush-hush' @@ -7,7 +7,7 @@ function sign (data) { return 'sha1=' + crypto.createHmac('sha1', secret).update(buffer).digest('hex') } -exports.isValid = function isValid (req) { +export function isValid (req) { const signature = req.headers['x-hub-signature'] return signature && signature === sign(req.raw) } diff --git a/lib/jenkins-events.js b/lib/jenkins-events.js new file mode 100644 index 00000000..7a97e551 --- /dev/null +++ b/lib/jenkins-events.js @@ -0,0 +1,84 @@ +import debugLib from 'debug' + +import * as pushJenkinsUpdate from './push-jenkins-update.js' + +const debug = debugLib('jenkins-events') +const enabledRepos = process.env.JENKINS_ENABLED_REPOS + ? process.env.JENKINS_ENABLED_REPOS.split(',') + : ['citgm', 'http-parser', 'node', 'node-auto-test'] + +const listOfKnownJenkinsIps = process.env.JENKINS_WORKER_IPS ? process.env.JENKINS_WORKER_IPS.split(',') : [] + +function isKnownJenkinsIp (req) { + const ip = req.connection.remoteAddress.split(':').pop() + + if (listOfKnownJenkinsIps.length && !listOfKnownJenkinsIps.includes(ip)) { + req.log.warn({ ip }, 'Ignoring, not allowed to push Jenkins updates') + return false + } + + return true +} + +function isRelatedToPullRequest (gitRef) { + // refs/pull/12345/head vs refs/heads/v8.x-staging/head + return gitRef.includes('/pull/') +} + +export default (app, events) => { + app.post('/:repo/jenkins/:event', async (req, res) => { + const isValid = pushJenkinsUpdate.validate(req.body) + const repo = req.params.repo + const event = req.params.event + const owner = req.body.owner || process.env.JENKINS_DEFAULT_GH_OWNER || 'nodejs' + + if (!isValid) { + return res.status(400).end('Invalid payload') + } + + if (!isRelatedToPullRequest(req.body.ref)) { + return res.status(400).end('Will only push builds related to pull requests') + } + + if (!enabledRepos.includes(repo)) { + return res.status(400).end('Invalid repository') + } + + if (!isKnownJenkinsIp(req)) { + return res.status(401).end('Invalid Jenkins IP') + } + + const data = { + ...req.body, + owner, + repo, + event + } + + try { + await app.emitJenkinsEvent(event, data, req.log) + res.status(200) + } catch (err) { + req.log.error(err, 'Error while emitting Jenkins event') + res.status(500) + } + + res.end() + }) + + app.emitJenkinsEvent = function emitJenkinsEvent (event, data, logger) { + const { identifier } = data + + // create unique logger which is easily traceable throughout the entire app + // by having e.g. "nodejs/nodejs.org/#1337" part of every subsequent log statement + data.logger = logger.child({ identifier, event }, true) + // prevent data.logger from plausibly being serialised to JSON due to circular references + Object.defineProperty(data, 'logger', { enumerable: false }) + + data.logger.info('Emitting Jenkins event') + debug(data) + + events.emit('jenkins', data) + return events.emit(`jenkins.${event}`, data) + } +} diff --git a/lib/logger.js b/lib/logger.js index d52657ba..885ef789 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,16 +1,15 @@ -'use strict' +import path from 'node:path' -const path = require('path') -const bunyan = require('bunyan') +import bunyan from 'bunyan' const isRunningTests = process.env.npm_lifecycle_event === 'test' -const stdoutLevel = isRunningTests ? 'FATAL' : 'INFO' +const stdoutLevel = isRunningTests ? 'FATAL' : process.env.LOG_LEVEL || 'INFO' const daysToKeepLogs = process.env.KEEP_LOGS || 10 const logsDir = process.env.LOGS_DIR || '' const rotatingFilePath = path.join(logsDir, 'bot.log') -let streams = [{ +const streams = [{ stream: process.stdout, level: stdoutLevel }] @@ -26,7 +25,7 @@ if (logsDir) { }) } -module.exports = bunyan.createLogger({ +export default bunyan.createLogger({ name: 'bot', streams }) diff --git a/lib/node-labels.js b/lib/node-labels.js deleted file mode 100644 index 756c38ad..00000000 --- a/lib/node-labels.js +++ /dev/null @@ -1,285 +0,0 @@ -'use strict' - -// order of entries in this map *does* matter for the resolved labels -// earlier entries override later entries -const subSystemLabelsMap = new Map([ - /* src subsystems */ - [/^src\/async-wrap/, ['c++', 'async_wrap']], - [/^src\/(?:base64|node_buffer|string_)/, ['c++', 'buffer']], - [/^src\/cares/, ['c++', 'cares']], - [/^src\/(?:process_wrap|spawn_)/, ['c++', 'child_process']], - [/^src\/node_crypto/, ['c++', 'crypto']], - [/^src\/(?:debug-|node_debug)/, ['c++', 'debugger']], - [/^src\/udp_/, ['c++', 'dgram']], - [/^src\/(?:fs_|node_file|node_stat_watcher)/, ['c++', 'fs']], - [/^src\/node_http_parser/, ['c++', 'http_parser']], - [/^src\/node_i18n/, ['c++', 'intl']], - [/^src\/uv\./, ['c++', 'libuv']], - [/^src\/(?:connect(?:ion)?|pipe|tcp)_/, ['c++', 'net']], - [/^src\/node_os/, ['c++', 'os']], - [/^src\/(?:node_main|signal_)/, ['c++', 'process']], - [/^src\/timer_/, ['c++', 'timers']], - [/^src\/(?:CNNICHashWhitelist|node_root_certs|tls_)/, ['c++', 'tls']], - [/^src\/tty_/, ['c++', 'tty']], - [/^src\/node_url/, ['c++', 'url-whatwg']], - [/^src\/node_util/, ['c++', 'util']], - [/^src\/(?:node_v8|v8abbr)/, ['c++', 'V8 Engine']], - [/^src\/node_contextify/, ['c++', 'vm']], - [/^src\/.*win32.*/, ['c++', 'windows']], - [/^src\/node_zlib/, ['c++', 'zlib']], - [/^src\/tracing/, ['c++', 'tracing']], - [/^src\/node_api/, ['c++', 'n-api']], - [/^src\/node_http2/, ['c++', 'http2', 'dont-land-on-v6.x']], - - // don't label python files as c++ - [/^src\/.+\.py$/, 'lib / src'], - - // properly label changes to v8 inspector integration-related files - [/^src\/inspector_/, ['c++', 'inspector']], - - // don't want to label it a c++ update when we're "only" bumping the Node.js version - [/^src\/(?!node_version\.h)/, 'c++'], - // BUILDING.md should be marked as 'build' in addition to 'doc' - [/^BUILDING\.md$/, ['build', 'doc']], - // meta is a very specific label for things that are policy and or meta-info related - [/^([A-Z]+$|CODE_OF_CONDUCT|ROADMAP|WORKING_GROUPS|GOVERNANCE|CHANGELOG|\.mail|\.git.+)/, 'meta'], - // things that edit top-level .md files are always a doc change - [/^\w+\.md$/, 'doc'], - // different variants of *Makefile and build files - [/^(tools\/)?(Makefile|BSDmakefile|create_android_makefiles)$/, 'build'], - [/^tools\/(install\.py|genv8constants\.py|getnodeversion\.py|js2c\.py|utils\.py|configure\.d\/.*)$/, 'build'], - [/^vcbuild\.bat$/, ['build', 'windows']], - [/^(android-)?configure|node\.gyp|common\.gypi$/, 'build'], - // more specific tools - [/^tools\/gyp/, ['tools', 'build']], - [/^tools\/doc\//, ['tools', 'doc']], - [/^tools\/icu\//, ['tools', 'intl']], - [/^tools\/(?:osx-pkg\.pmdoc|pkgsrc)\//, ['tools', 'macos', 'install']], - [/^tools\/(?:(?:mac)?osx-)/, ['tools', 'macos']], - [/^tools\/test-npm/, ['tools', 'test', 'npm']], - [/^tools\/test/, ['tools', 'test']], - [/^tools\/(?:certdata|mkssldef|mk-ca-bundle)/, ['tools', 'openssl', 'tls']], - [/^tools\/msvs\//, ['tools', 'windows', 'install']], - [/^tools\/[^/]+\.bat$/, ['tools', 'windows']], - [/^tools\/make-v8/, ['tools', 'V8 Engine']], - // all other tool changes should be marked as such - [/^tools\//, 'tools'], - [/^\.eslint|\.remark|\.editorconfig/, 'tools'], - - /* Dependencies */ - // libuv needs an explicit mapping, as the ordinary /deps/ mapping below would - // end up as libuv changes labeled with "uv" (which is a non-existing label) - [/^deps\/uv\//, 'libuv'], - [/^deps\/v8\/tools\/gen-postmortem-metadata\.py/, ['V8 Engine', 'post-mortem']], - [/^deps\/v8\//, 'V8 Engine'], - [/^deps\/nghttp2\/nghttp2\.gyp/, ['build', 'http2', 'dont-land-on-v6.x']], - [/^deps\/nghttp2\//, ['http2', 'dont-land-on-v6.x']], - [/^deps\/([^/]+)/, '$1'], - - /* JS subsystems */ - // Oddities first - [/^lib\/(punycode|\w+\/freelist|sys\.js)/, ''], // TODO: ignore better? - [/^lib\/constants\.js$/, 'lib / src'], - [/^lib\/_(debug_agent|debugger)\.js$/, 'debugger'], - [/^lib(\/\w+)?\/(_)?link(ed)?list/, 'timers'], - [/^lib\/\w+\/bootstrap_node/, 'lib / src'], - [/^lib\/\w+\/v8_prof_/, 'tools'], - [/^lib\/\w+\/socket_list/, 'net'], - [/^lib\/\w+\/streams$/, 'stream'], - [/^lib\/.*http2/, ['http2', 'dont-land-on-v6.x']], - [/^lib\/internal\/url\.js$/, ['url-whatwg']], - // All other lib/ files map directly - [/^lib\/_(\w+)_\w+\.js?$/, '$1'], // e.g. _(stream)_wrap - [/^lib(\/internal)?\/(\w+)\.js?$/, '$2'], // other .js files - [/^lib\/internal\/(\w+)(?:\/|$)/, '$1'] // internal subfolders -]) - -const jsSubsystemList = [ - 'debugger', 'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', - 'console', 'crypto', 'dgram', 'dns', 'domain', 'events', 'fs', 'http', - 'https', 'http2', 'module', 'net', 'os', 'path', 'process', 'querystring', - 'readline', 'repl', 'stream', 'string_decoder', 'timers', 'tls', 'tty', 'url', - 'util', 'v8', 'vm', 'zlib' -] - -const exclusiveLabelsMap = new Map([ - // more specific tests - [/^test\/addons\//, ['test', 'addons']], - [/^test\/debugger\//, ['test', 'debugger']], - [/^test\/doctool\//, ['test', 'doc', 'tools']], - [/^test\/timers\//, ['test', 'timers']], - [/^test\/pseudo-tty\//, ['test', 'tty']], - [/^test\/inspector\//, ['test', 'inspector']], - [/^test\/cctest\/test_inspector/, ['test', 'inspector']], - [/^test\/cctest\/test_url/, ['test', 'url-whatwg']], - [/^test\/addons-napi\//, ['test', 'n-api']], - [/^test\/async-hooks\//, ['test', 'async_hooks']], - - [/^test\//, 'test'], - - // specific map for modules.md as it should be labeled 'module' not 'modules' - [/^doc\/api\/modules.md$/, ['doc', 'module']], - // n-api is treated separately since it is not a JS core module but is still - // considered a subsystem of sorts - [/^doc\/api\/n-api.md$/, ['doc', 'n-api']], - // automatically tag JS subsystem-specific API doc changes - [/^doc\/api\/(\w+)\.md$/, ['doc', '$1']], - - [/^doc\//, 'doc'], - - // more specific benchmarks - [/^benchmark\/buffers\//, ['benchmark', 'buffer']], - [/^benchmark\/(?:arrays|es)\//, ['benchmark', 'V8 Engine']], - [/^benchmark\/_http/, ['benchmark', 'http']], - [/^benchmark\/(?:misc|fixtures)\//, 'benchmark'], - [/^benchmark\/streams\//, ['benchmark', 'stream']], - [/^benchmark\/([^/]+)\//, ['benchmark', '$1']], - - [/^benchmark\//, 'benchmark'] -]) - -function resolveLabels (filepathsChanged, baseBranch, limitLabels = true) { - const exclusiveLabels = matchExclusiveSubSystem(filepathsChanged) - - if (typeof baseBranch !== 'string') { - if (typeof baseBranch === 'boolean') { - limitLabels = baseBranch - } - baseBranch = '' - } - - const labels = (exclusiveLabels.length > 0) - ? exclusiveLabels - : matchAllSubSystem(filepathsChanged, limitLabels) - - // Add version labels if PR is made against a version branch - const m = /^(v\d+\.(?:\d+|x))(?:-staging|$)/.exec(baseBranch) - if (m) { - labels.push(m[1]) - } - - return labels -} - -function hasAllSubsystems (arr) { - return arr.every((val) => { - return jsSubsystemList.includes(val) - }) -} - -// This function is needed to help properly identify when a PR should always -// (just) be labeled as 'doc' when it is all changes in doc/api/ that do not -// match subsystem names (e.g. _toc.md, all.md) -function hasAllDocChanges (arr) { - return arr.every((val) => { - return /^doc\//.test(val) - }) -} - -function hasAllTestChanges (arr) { - return arr.every((val) => { - return /^test\//.test(val) - }) -} - -function matchExclusiveSubSystem (filepathsChanged) { - const isExclusive = filepathsChanged.every(matchesAnExclusiveLabel) - var labels = matchSubSystemsByRegex(exclusiveLabelsMap, filepathsChanged) - var nonMetaLabels = labels.filter((label) => { - return !/^dont\-/.test(label) - }) - - // if there are multiple API doc changes, do not apply subsystem tags for now - if (isExclusive && - nonMetaLabels.includes('doc') && - nonMetaLabels.length > 2 && - !hasAllTestChanges(filepathsChanged)) { - const nonDocLabels = nonMetaLabels.filter((val) => { - return val !== 'doc' - }) - if (hasAllSubsystems(nonDocLabels) || hasAllDocChanges(filepathsChanged)) { - labels = ['doc'] - } else { - labels = [] - } - } - return isExclusive ? labels : [] -} - -function matchAllSubSystem (filepathsChanged, limitLabels) { - return matchSubSystemsByRegex( - subSystemLabelsMap, filepathsChanged, limitLabels) -} - -function matchSubSystemsByRegex (rxLabelsMap, filepathsChanged, limitLabels) { - const labelCount = [] - // by putting matched labels into a map, we avoid duplicate labels - const labelsMap = filepathsChanged.reduce((map, filepath) => { - const mappedSubSystems = mappedSubSystemsForFile(rxLabelsMap, filepath) - - if (!mappedSubSystems) { - // short-circuit - return map - } - - for (var i = 0; i < mappedSubSystems.length; ++i) { - const mappedSubSystem = mappedSubSystems[i] - if (limitLabels && hasLibOrSrcChanges(filepathsChanged)) { - if (labelCount.length >= 4) { - for (const label of labelCount) { - // don't delete the c++ label as we always want that if it has matched - if (label !== 'c++') delete map[label] - } - map['lib / src'] = true - // short-circuit - return map - } else { - labelCount.push(mappedSubSystem) - } - } - - map[mappedSubSystem] = true - } - - return map - }, {}) - - return Object.keys(labelsMap) -} - -function hasLibOrSrcChanges (filepathsChanged) { - return filepathsChanged.some((filepath) => filepath.startsWith('lib/') || filepath.startsWith('src/')) -} - -function mappedSubSystemsForFile (labelsMap, filepath) { - for (const [regex, label] of labelsMap) { - const matches = regex.exec(filepath) - - if (matches === null) { - continue - } - - const ret = [] - const labels = Array.isArray(label) ? label : [label] - labels.forEach((label) => { - // label names starting with $ means we want to extract a matching - // group from the regex we've just matched against - if (label.startsWith('$')) { - const wantedMatchGroup = label.substr(1) - label = matches[wantedMatchGroup] - } - if (!label) { - return - } - // use label name as is when label doesn't look like a regex matching group - ret.push(label) - }) - return ret - } -} - -function matchesAnExclusiveLabel (filepath) { - return mappedSubSystemsForFile(exclusiveLabelsMap, filepath) !== undefined -} - -exports.resolveLabels = resolveLabels diff --git a/lib/node-owners.js b/lib/node-owners.js new file mode 100644 index 00000000..ee431d07 --- /dev/null +++ b/lib/node-owners.js @@ -0,0 +1,24 @@ +import { matchPattern, parse } from 'codeowners-utils' + +export class Owners { + constructor (ownersDefinitions) { + this._ownersDefinitions = ownersDefinitions + } + + static fromFile (content) { + return new Owners(parse(content)) + } + + getOwnersForPaths (paths) { + let ownersForPaths = [] + for (const { pattern, owners } of this._ownersDefinitions) { + for (const path of paths) { + if (matchPattern(path, pattern)) { + ownersForPaths = ownersForPaths.concat(owners) + } + } + } + // Remove duplicates before returning + return ownersForPaths.filter((v, i) => ownersForPaths.indexOf(v) === i).sort() + } +} diff --git a/lib/node-repo.js b/lib/node-repo.js index 5b39f84b..c21210e6 100644 --- a/lib/node-repo.js +++ b/lib/node-repo.js @@ -1,81 +1,18 @@ -'use strict' +/* eslint-disable camelcase */ -const LRU = require('lru-cache') -const retry = require('async').retry +import https from 'node:https' -const githubClient = require('./github-client') -const resolveLabels = require('./node-labels').resolveLabels -const existingLabelsCache = new LRU({ max: 1, maxAge: 1000 * 60 * 60 }) +import Aigle from 'aigle' -const fiveSeconds = 5 * 1000 - -function deferredResolveLabelsThenUpdatePr (options) { - const timeoutMillis = (options.timeoutInSec || 0) * 1000 - setTimeout(resolveLabelsThenUpdatePr, timeoutMillis, options) -} - -function resolveLabelsThenUpdatePr (options) { - options.logger.debug('Fetching PR files for labelling') - - const getFiles = (cb) => { - githubClient.pullRequests.getFiles({ - owner: options.owner, - repo: options.repo, - number: options.prId - }, cb) - } - - retry({ times: 5, interval: fiveSeconds }, getFiles, (err, res) => { - if (err) { - return options.logger.error(err, 'Error retrieving files from GitHub') - } - - const filepathsChanged = res.data.map((fileMeta) => fileMeta.filename) - const resolvedLabels = resolveLabels(filepathsChanged, options.baseBranch) - - fetchExistingThenUpdatePr(options, resolvedLabels) - }) -} - -function fetchExistingThenUpdatePr (options, labels) { - fetchExistingLabels(options, (err, existingLabels) => { - if (err) { - options.logger.error(err, 'Error retrieving existing repo labels') - - updatePrWithLabels(options, labels) - return - } - - const labelsToAdd = stringsInCommon(existingLabels, labels) - options.logger.debug('Resolved labels: ' + labelsToAdd) - - updatePrWithLabels(options, labelsToAdd) - }) -} +import githubClient from './github-client.js' +import { createPrComment } from './github-comment.js' +import { Owners } from './node-owners.js' -function updatePrWithLabels (options, labels) { - // no need to request github if we didn't resolve any labels - if (!labels.length) { - return - } - - options.logger.debug('Trying to add labels: ' + labels) - - githubClient.issues.addLabels({ - owner: options.owner, - repo: options.repo, - number: options.prId, - labels: labels - }, (err) => { - if (err) { - return options.logger.error(err, 'Error while adding labels') - } +const fiveSeconds = 5 * 1000 - options.logger.info('Added labels: ' + labels) - }) -} +const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)) -function removeLabelFromPR (options, label) { +export async function removeLabelFromPR (options, label) { // no need to request github if we didn't resolve a label if (!label) { return @@ -83,81 +20,34 @@ function removeLabelFromPR (options, label) { options.logger.debug('Trying to remove label: ' + label) - githubClient.issues.removeLabel({ - owner: options.owner, - repo: options.repo, - number: options.prId, - name: label - }, (err) => { - if (err) { - if (err.code === 404) return options.logger.info('Label to remove did not exist, bailing ' + label) - - return options.logger.error(err, 'Error while removing a label') + try { + await githubClient.issues.removeLabel({ + owner: options.owner, + repo: options.repo, + issue_number: options.prId, + name: label + }) + } catch (err) { + if (err.code === 404) { + options.logger.info('Label to remove did not exist, bailing ' + label) + throw err } - - options.logger.info('Removed a label ' + label) - }) -} - -function fetchExistingLabels (options, cb) { - const cacheKey = `${options.owner}:${options.repo}` - - if (existingLabelsCache.has(cacheKey)) { - return cb(null, existingLabelsCache.get(cacheKey)) + options.logger.error(err, 'Error while removing a label') + throw err } - fetchLabelPages(options, 1, (err, existingLabels) => { - if (err) { - return cb(err) - } - - existingLabels = existingLabels.data || existingLabels || [] - const existingLabelNames = existingLabels.map((label) => label.name) - - // cache labels so we don't have to fetch these *all the time* - existingLabelsCache.set(cacheKey, existingLabelNames) - options.logger.debug('Filled existing repo labels cache: ' + existingLabelNames) - - cb(null, existingLabelNames) - }) + options.logger.info('Removed a label ' + label) + return label } -function fetchLabelPages (options, startPageNum, cb) { - // the github client API is somewhat misleading, - // this fetches *all* repo labels not just for an issue - githubClient.issues.getLabels({ - owner: options.owner, - repo: options.repo, - page: startPageNum, - per_page: 100 - }, (err, res) => { - const existingLabels = res.data || [] - if (err) { - return cb(err) - } - if (!githubClient.hasNextPage(res)) { - return cb(null, existingLabels) - } - fetchLabelPages( - options, - startPageNum + 1, - (err, remainingLabels) => err ? cb(err) : cb(null, existingLabels.concat(remainingLabels)) - ) - }) -} - -function getBotPrLabels (options, cb) { - githubClient.issues.getEvents({ +export function getBotPrLabels (options, cb) { + githubClient.issues.listEvents({ owner: options.owner, repo: options.repo, page: 1, per_page: 100, // we probably won't hit this issue_number: options.prId - }, (err, res) => { - if (err) { - return cb(err) - } - + }).then(res => { const events = res.data || [] const ourLabels = [] @@ -178,20 +68,124 @@ function getBotPrLabels (options, cb) { } cb(null, ourLabels) + }, cb) +} + +async function deferredResolveOwnersThenPingPr (options) { + const timeoutMillis = (options.timeoutInSec || 0) * 1000 + await sleep(timeoutMillis) + return resolveOwnersThenPingPr(options) +} + +function getCodeOwnersUrl (owner, repo, defaultBranch) { + const base = 'raw.githubusercontent.com' + const filepath = '.github/CODEOWNERS' + return `https://${base}/${owner}/${repo}/${defaultBranch}/${filepath}` +} + +async function listFiles ({ owner, repo, prId, logger }) { + try { + const response = await githubClient.pulls.listFiles({ + owner, + repo, + pull_number: prId + }) + return response.data.map(({ filename }) => filename) + } catch (err) { + logger.error(err, 'Error retrieving files from GitHub') + throw err + } +} + +async function getDefaultBranch ({ owner, repo, logger }) { + try { + const data = (await githubClient.repos.get({ owner, repo })).data || { } + + if (!data.default_branch) { + logger.error(null, 'Could not determine default branch') + throw new Error('unknown default branch') + } + + return data.default_branch + } catch (err) { + logger.error(err, 'Error retrieving repository data') + throw err + } +} + +function getCodeOwnersFile (url, { logger }) { + return new Promise((resolve, reject) => { + https.get(url, (res) => { + if (res.statusCode !== 200) { + logger.error(`Status code: ${res.statusCode}`, 'Error retrieving OWNERS') + return reject(res.statusCode) + } + let body = '' + res.on('data', (chunk) => { + body += chunk + }) + res.on('end', () => { + return resolve(body) + }) + }).on('err', (err) => { + logger.error(err, 'Error retrieving OWNERS') + return reject(err) + }) }) } -function stringsInCommon (arr1, arr2) { - const loweredArr2 = arr2.map((str) => str.toLowerCase()) - // we want the original string cases in arr1, therefore we don't lowercase them - // before comparing them cause that would wrongly make "V8" -> "v8" - return arr1.filter((str) => loweredArr2.indexOf(str.toLowerCase()) !== -1) +async function resolveOwnersThenPingPr (options) { + const { owner, repo } = options + const times = options.retries || 5 + const interval = options.retryInterval || fiveSeconds + const retry = fn => Aigle.retry({ times, interval }, fn) + + options.logger.debug('Getting file paths') + const filepathsChanged = await retry(() => listFiles(options)) + options.logger = options.logger.child({ filepathsChanged }) + + options.logger.debug('Getting default branch') + const defaultBranch = await retry(() => getDefaultBranch(options)) + + const url = getCodeOwnersUrl(owner, repo, defaultBranch) + options.logger = options.logger.child({ codeownersUrl: url }) + + options.logger.debug('Fetching OWNERS') + const file = await retry(() => getCodeOwnersFile(url, options)) + + const owners = Owners.fromFile(file) + const selectedOwners = owners.getOwnersForPaths(filepathsChanged) + options.logger = options.logger.child({ owners: selectedOwners }) + + options.logger.debug('Codeowners file parsed') + if (selectedOwners.length > 0) { + await pingOwners(options, selectedOwners) + } +} + +function getCommentForOwners (owners) { + return `Review requested:\n\n${owners.map(i => `- [ ] ${i}`).join('\n')}` } -exports.getBotPrLabels = getBotPrLabels -exports.removeLabelFromPR = removeLabelFromPR -exports.fetchExistingThenUpdatePr = fetchExistingThenUpdatePr -exports.resolveLabelsThenUpdatePr = deferredResolveLabelsThenUpdatePr +async function pingOwners (options, owners) { + options.logger.debug('Pinging codeowners') + try { + await createPrComment({ + owner: options.owner, + repo: options.repo, + issue_number: options.prId, + logger: options.logger + }, getCommentForOwners(owners)) + } catch (err) { + options.logger.error(err, 'Error while pinging owners') + throw err + } + options.logger.debug('Owners pinged successfully') +} + +export { deferredResolveOwnersThenPingPr as resolveOwnersThenPingPr } // exposed for testability -exports._fetchExistingLabels = fetchExistingLabels +export const _testExports = { + pingOwners, getCodeOwnersFile, getCodeOwnersUrl, getDefaultBranch, listFiles, getCommentForOwners +} diff --git a/lib/push-jenkins-update.js b/lib/push-jenkins-update.js index d22d5163..a2ec9cde 100644 --- a/lib/push-jenkins-update.js +++ b/lib/push-jenkins-update.js @@ -1,10 +1,7 @@ -'use strict' +import githubClient from './github-client.js' +import { createPrComment } from './github-comment.js' -const url = require('url') - -const githubClient = require('./github-client') - -function pushStarted (options, build) { +export function pushStarted (options, build, cb) { const pr = findPrInRef(build.ref) // create unique logger which is easily traceable for every subsequent log statement @@ -13,11 +10,26 @@ function pushStarted (options, build) { const optsWithPr = Object.assign({ pr }, options) - findLatestCommitInPr(optsWithPr, (err, latestCommit) => { - if (err) { - return logger.error(err, 'Got error when retrieving GitHub commits for PR') + if (build.status === 'pending') { + switch (build.identifier) { + case 'node-test-pull-request': + createPrComment(Object.assign({ issue_number: pr }, options), `CI: ${build.url}`) + break + + case 'node-test-commit-v8-linux': + createPrComment(Object.assign({ issue_number: pr }, options), `V8 CI: ${build.url}`) + break + + case 'node-test-pull-request-lite-pipeline': + createPrComment(Object.assign({ issue_number: pr }, options), `Lite-CI: ${build.url}`) + break + + default: + break } + } + findLatestCommitInPr(optsWithPr).then(latestCommit => { const statusOpts = Object.assign({ sha: latestCommit.sha, url: build.url, @@ -26,11 +38,14 @@ function pushStarted (options, build) { message: build.message || 'running tests' }, options) - createGhStatus(statusOpts, logger) + createGhStatus(statusOpts, logger).then(cb).catch(cb) + }, err => { + logger.error(err, 'Got error when retrieving GitHub commits for PR') + return cb(err) }) } -function pushEnded (options, build) { +export function pushEnded (options, build, cb) { const pr = findPrInRef(build.ref) // create unique logger which is easily traceable for every subsequent log statement @@ -39,11 +54,7 @@ function pushEnded (options, build) { const optsWithPr = Object.assign({ pr }, options) - findLatestCommitInPr(optsWithPr, (err, latestCommit) => { - if (err) { - return logger.error(err, 'Got error when retrieving GitHub commits for PR') - } - + findLatestCommitInPr(optsWithPr).then(latestCommit => { const statusOpts = Object.assign({ sha: latestCommit.sha, url: build.url, @@ -52,70 +63,54 @@ function pushEnded (options, build) { message: build.message || 'all tests passed' }, options) - createGhStatus(statusOpts, logger) + createGhStatus(statusOpts, logger).then(cb, cb) + }, err => { + logger.error(err, 'Got error when retrieving GitHub commits for PR') + return cb(err) }) } function findPrInRef (gitRef) { // refs/pull/12345/head - return gitRef.split('/')[2] + return parseInt(gitRef.split('/')[2], 10) } -function findLatestCommitInPr (options, cb, pageNumber = 1) { - githubClient.pullRequests.getCommits({ +export async function findLatestCommitInPr (options) { + const paginateOptions = githubClient.pulls.listCommits.endpoint.merge({ owner: options.owner, repo: options.repo, - number: options.pr, - page: pageNumber, - per_page: 100 - }, (err, res) => { - const commitMetas = res.data || [] - if (err) { - return cb(err) - } - - const lastPageURL = githubClient.hasLastPage(res) - if (lastPageURL) { - return findLatestCommitInPr(options, cb, pageNumberFromURL(lastPageURL)) - } + pull_number: options.pr + }) + const commitMetas = await githubClient.paginate(paginateOptions) - const lastCommitMeta = commitMetas.pop() - const lastCommit = { - sha: lastCommitMeta.sha, - date: lastCommitMeta.commit.committer.date - } + const lastCommitMeta = commitMetas.pop() + const lastCommit = { + sha: lastCommitMeta.sha, + date: lastCommitMeta.commit.committer.date + } - cb(null, lastCommit) - }) + return lastCommit } -function createGhStatus (options, logger) { - githubClient.repos.createStatus({ - owner: options.owner, - repo: options.repo, - sha: options.sha, - target_url: options.url, - context: options.context, - state: options.state, - description: options.message - }, (err, res) => { - if (err) { - return logger.error(err, 'Error while updating Jenkins / GitHub PR status') - } - logger.info('Jenkins / Github PR status updated') - }) +async function createGhStatus (options, logger) { + try { + await githubClient.repos.createCommitStatus({ + owner: options.owner, + repo: options.repo, + sha: options.sha, + target_url: options.url, + context: options.context, + state: options.state, + description: options.message + }) + } catch (err) { + logger.error(err, 'Error while updating Jenkins / GitHub PR status') + throw err + } + logger.info('Jenkins / Github PR status updated') } -function validate (payload) { +export function validate (payload) { const isString = (param) => typeof (payload[param]) === 'string' return ['identifier', 'status', 'message', 'commit', 'url'].every(isString) } - -function pageNumberFromURL (githubUrl) { - return url.parse(githubUrl, true).query.page -} - -exports.validate = validate -exports.pushStarted = pushStarted -exports.pushEnded = pushEnded -exports.findLatestCommitInPr = findLatestCommitInPr diff --git a/package-lock.json b/package-lock.json index 788ec791..ffb432ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7986 +1,4974 @@ { "name": "nodejs-github-bot", "version": "1.0.0-beta1", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" + "packages": { + "": { + "name": "nodejs-github-bot", + "version": "1.0.0-beta1", + "license": "MIT", + "dependencies": { + "@octokit/rest": "^22.0.0", + "aigle": "^1.14.1", + "basic-auth": "^2.0.1", + "body-parser": "^2.2.0", + "bunyan": "^1.8.1", + "bunyan-middleware": "1.0.2", + "codeowners-utils": "^1.0.2", + "debug": "^4.4.1", + "dotenv": "^16.5.0", + "events-async": "^1.2.1", + "express": "^5.1.0", + "glob": "11.0.2" + }, + "devDependencies": { + "eventsource": "^4.0.0", + "fetch-mock": "^12.5.2", + "nock": "^14.0.5", + "nodemon": "^3.1.10", + "standard": "^17.1.2", + "supertest": "^7.1.1" + }, + "engines": { + "node": ">= 20.11.0" } }, - "@types/bunyan": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-0.0.36.tgz", - "integrity": "sha1-/dhlxY6OqvCtQBzQMtyGH1xXNCo=", - "requires": { - "@types/node": "*" + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" - }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", - "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" - }, - "@types/node": { - "version": "10.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", - "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==" - }, - "@types/range-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", - "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", "dev": true, - "requires": { - "acorn": "^3.0.4" - }, + "license": "MIT", "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "node_modules/@eslint/js": { + "version": "8.44.0", "dev": true, - "requires": { - "string-width": "^2.0.0" + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/@mswjs/interceptors": { + "version": "0.38.7", "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "node_modules/@noble/hashes": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "async": { + "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", - "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", - "requires": { - "lodash": "^4.14.0" + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "license": "MIT", + "engines": { + "node": ">= 20" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "node_modules/@octokit/core": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.1", + "@octokit/request": "^10.0.2", + "@octokit/request-error": "^7.0.0", + "@octokit/types": "^14.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + "node_modules/@octokit/endpoint": { + "version": "11.0.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node_modules/@octokit/graphql": { + "version": "9.0.1", + "license": "MIT", + "dependencies": { + "@octokit/request": "^10.0.2", + "@octokit/types": "^14.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" } }, - "basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" + "node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "license": "MIT" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/@octokit/plugin-paginate-rest": { + "version": "13.0.1", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.1.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" } }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true + "node_modules/@octokit/plugin-request-log": { + "version": "6.0.0", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } }, - "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "16.0.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.1.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@octokit/request": { + "version": "10.0.2", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.0", + "@octokit/request-error": "^7.0.0", + "@octokit/types": "^14.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/@octokit/request-error": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.0.0" + }, + "engines": { + "node": ">= 20" } }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", - "dev": true - }, - "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" + "node_modules/@octokit/rest": { + "version": "22.0.0", + "license": "MIT", + "dependencies": { + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" + }, + "engines": { + "node": ">= 20" } }, - "bunyan-middleware": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/bunyan-middleware/-/bunyan-middleware-0.8.0.tgz", - "integrity": "sha1-K6vEmGtHCsfq7303POAkjOqbXPA=", - "requires": { - "@types/bunyan": "^0.0.36", - "@types/express": "^4.0.35", - "uuid": "^3.0.0" + "node_modules/@octokit/types": { + "version": "14.1.0", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "dev": true, + "license": "MIT" }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "node_modules/@open-draft/logger": { + "version": "0.3.0", "dev": true, - "requires": { - "callsites": "^0.2.0" + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" } }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "node_modules/@open-draft/until": { + "version": "2.1.0", "dev": true, - "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" - } + "license": "MIT" }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "node_modules/@types/body-parser": { + "version": "1.19.2", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", - "dev": true + "node_modules/@types/bunyan": { + "version": "1.8.8", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "node_modules/@types/connect": { + "version": "3.4.35", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", - "dev": true + "node_modules/@types/express": { + "version": "4.17.13", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "node_modules/@types/glob-to-regexp": { + "version": "0.4.4", "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } + "license": "MIT" }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "node_modules/@types/mime": { + "version": "1.3.2", + "license": "MIT" }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "node_modules/@types/node": { + "version": "17.0.23", + "license": "MIT" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "node_modules/@types/qs": { + "version": "6.9.7", + "license": "MIT" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "node_modules/@types/range-parser": { + "version": "1.2.4", + "license": "MIT" }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" + "node_modules/@types/serve-static": { + "version": "1.13.10", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, - "color-name": { + "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "dev": true, + "license": "ISC" }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/accepts": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/acorn": { + "version": "8.12.1", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "node_modules/aigle": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "aigle-core": "^1.0.0" + } }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true + "node_modules/aigle-core": { + "version": "1.0.0", + "license": "MIT" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "coveralls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", - "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", - "dev": true, - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.11.0", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.85.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "node_modules/anymatch": { + "version": "3.1.2", "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "node_modules/array-includes": { + "version": "3.1.8", "dev": true, - "requires": { - "es5-ext": "^0.10.9" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", "dev": true, - "requires": { - "type-detect": "^4.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { + "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, - "requires": { - "clone": "^1.0.2" + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } + "node_modules/asap": { + "version": "2.0.6", + "dev": true, + "license": "MIT" }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "dev": true, - "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - } - } + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "node_modules/balanced-match": { + "version": "1.0.2", + "devOptional": true, + "license": "MIT" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "node_modules/basic-auth": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true + "node_modules/before-after-hook": { + "version": "4.0.0", + "license": "Apache-2.0" }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" + "node_modules/body-parser": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, - "dotenv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz", - "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=" - }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", - "optional": true, - "requires": { - "nan": "^2.10.0" + "node_modules/brace-expansion": { + "version": "1.1.11", + "devOptional": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "~0.1.0" + "node_modules/builtins": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "node_modules/bunyan": { + "version": "1.8.15", + "engines": [ + "node >=0.10.0" + ], + "license": "MIT", + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } }, - "encodeurl": { + "node_modules/bunyan-middleware": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "es5-ext": { - "version": "0.10.45", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", - "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "license": "MIT", + "dependencies": { + "@types/bunyan": "^1.8.6", + "@types/express": "^4.0.35", + "uuid": "^8.3.2" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "node_modules/call-bind": { + "version": "1.0.7", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "node_modules/callsites": { + "version": "3.1.0", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "node_modules/codeowners-utils": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.2", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "locate-path": "^5.0.0" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "node_modules/combined-stream": { + "version": "1.0.8", "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "eslint": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.2.0.tgz", - "integrity": "sha1-bI10OpFUZZW6GG7e0JZoL0dZjeg=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.1.0", - "es6-map": "^0.1.3", - "escope": "^3.4.0", - "espree": "^3.0.0", - "estraverse": "^4.1.1", - "estraverse-fb": "^1.3.1", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^6.0.4", - "globals": "^8.18.0", - "ignore": "^2.2.19", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "resolve": "^1.1.6", - "shelljs": "^0.5.3", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "node_modules/component-emitter": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-config-standard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.1.0.tgz", - "integrity": "sha1-ZwvzyQ2Z0EuKcFz+6nCWpn0XpmE=", - "dev": true + "node_modules/concat-map": { + "version": "0.0.1", + "devOptional": true, + "license": "MIT" }, - "eslint-config-standard-jsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.1.1.tgz", - "integrity": "sha1-CYqnD16nBvJbqn2bc+cT9dodkqQ=", - "dev": true + "node_modules/content-disposition": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=", - "dev": true + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "eslint-plugin-react": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-4.3.0.tgz", - "integrity": "sha1-x5qsgGnWLeJ4h8E7gpjVkgiN43g=", - "dev": true + "node_modules/cookie": { + "version": "0.7.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=", - "dev": true + "node_modules/cookie-signature": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "node_modules/cookiejar": { + "version": "2.1.4", "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "estraverse-fb": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz", - "integrity": "sha1-0yOky15awzHOoDNBOpJT4WQ+B8Q=", - "dev": true + "node_modules/debug": { + "version": "4.4.1", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "node_modules/define-data-property": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "event-stream": { - "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "node_modules/delayed-stream": { + "version": "1.0.0", "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "eventsource": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.2.3.tgz", - "integrity": "sha1-MLjyG0DYaWjq7r0ZmpUHLuVLDfM=", + "node_modules/dequal": { + "version": "2.0.3", "dev": true, - "requires": { - "original": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "node_modules/dezalgo": { + "version": "1.0.4", "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "node_modules/dotenv": { + "version": "16.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "node_modules/dtrace-provider": { + "version": "0.8.8", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", + "node_modules/es-abstract": { + "version": "1.23.3", "dev": true, - "requires": { - "is-object": "~1.0.1", - "merge-descriptors": "~1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "flat-cache": { + "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "follow-redirects": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.6.tgz", - "integrity": "sha512-FrMqZ/FONtHnbqO651UPpfRUVukIEwJhXMfdr/JWAmrDbeYBu773b1J6gdWDyRIj4hvvzQEHoEOTrdR8o6KLYA==", - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", "dev": true, - "requires": { - "samsam": "~1.1" + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" } }, - "formidable": { + "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "node_modules/eslint": { + "version": "8.44.0", "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, + "license": "MIT", "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, - "function-loop": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.1.tgz", - "integrity": "sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "node_modules/eslint-config-standard-jsx": { + "version": "11.0.0", "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/github/-/github-12.1.0.tgz", - "integrity": "sha512-HhWjhd/OATC4Hjj7xfGjGRtwWzo/fzTc55EkvsRatI9G6Vp47mVcdBIt1lQ56A9Qit/yVQRX1+M9jbWlcJvgug==", - "requires": { - "dotenv": "^4.0.0", - "follow-redirects": "1.2.6", - "https-proxy-agent": "^2.1.0", - "lodash": "^4.17.4", - "mime": "^2.0.3", - "netrc": "^0.1.4" - }, - "dependencies": { - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, - "requires": { - "ini": "^1.3.4" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "globals": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz", - "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true } } }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } + "ms": "^2.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/eslint-plugin-es": { + "version": "4.1.0", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "ignore": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-2.2.19.tgz", - "integrity": "sha1-TIRaYfflC0pBD2FWqqOLatleDI8=", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { + "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/eslint-plugin-n": { + "version": "15.7.0", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, + "license": "MIT", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", "dev": true, - "requires": { - "binary-extensions": "^1.0.0" + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "node_modules/eslint-plugin-react": { + "version": "7.36.1", "dev": true, - "requires": { - "ci-info": "^1.0.0" + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, + "license": "Apache-2.0", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + "license": "MIT", "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "node_modules/eslint-scope": { + "version": "7.2.0", "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "node_modules/eslint-utils": { + "version": "3.0.0", "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", "dev": true, - "requires": { - "is-path-inside": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", "dev": true, - "requires": { - "path-is-inside": "^1.0.1" + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "requires": { - "isobject": "^3.0.1" + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "node_modules/espree": { + "version": "9.6.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "node_modules/events-async": { + "version": "1.2.1", + "license": "ISC" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "node_modules/eventsource": { + "version": "4.0.0", "dev": true, - "requires": { - "jsonify": "~0.0.0" + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=20.0.0" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "node_modules/eventsource-parser": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "node_modules/express": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" } }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "license": "MIT" }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "dev": true, + "license": "MIT" }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true + "node_modules/fetch-mock": { + "version": "12.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob-to-regexp": "^0.4.4", + "dequal": "^2.0.3", + "glob-to-regexp": "^0.4.1", + "regexparam": "^3.0.0" + }, + "engines": { + "node": ">=18.11.0" + } }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "node_modules/fill-range": { + "version": "7.1.1", "dev": true, - "requires": { - "pify": "^3.0.0" + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "node_modules/finalhandler": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/flat-cache": { + "version": "3.0.4", "dev": true, - "requires": { - "object-visit": "^1.0.0" + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "node_modules/foreground-child": { + "version": "3.2.1", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "minipass": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", - "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "node_modules/form-data": { + "version": "4.0.2", "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "node_modules/formidable": { + "version": "3.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", - "dev": true - }, - "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", - "optional": true - }, - "ms": { + "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "dev": true, - "requires": { - "strip-indent": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true + "node_modules/function.prototype.name": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "netrc": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz", - "integrity": "sha1-a+lPysqNd63gqWcNxGCRTJRHJEQ=" + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nock": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-9.6.1.tgz", - "integrity": "sha512-EDgl/WgNQ0C1BZZlASOQkQdE6tAWXJi8QQlugqzN64JJkvZ7ILijZuG24r4vCC7yOfnm6HKpne5AGExLGCeBWg==", - "dev": true, - "requires": { - "chai": "^4.1.2", - "debug": "^3.1.0", - "deep-equal": "^1.0.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.5", - "mkdirp": "^0.5.0", - "propagate": "^1.0.0", - "qs": "^6.5.1", - "semver": "^5.5.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "nodemon": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.1.tgz", - "integrity": "sha512-zKKrRcn5htBkPz6N5SiFLG8kneJxhW//zO7/RB08TaQgBZrbmjUlORBy6ALIbpwwp+Q8F9mWbnbkJXh6rjlALA==", + "node_modules/get-stdin": { + "version": "8.0.0", "dev": true, - "requires": { - "chokidar": "^2.0.2", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.0", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "node_modules/get-symbol-description": { + "version": "1.0.2", "dev": true, - "requires": { - "abbrev": "1" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/glob": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", + "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.1.tgz", + "integrity": "sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^3.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.2.tgz", + "integrity": "sha512-+9TJCIYXgZ2Dm5LxVCFsa8jOm+evMwXHFI0JM1XROmkfkpz8/iLLDh+TwSmyIBrs6C6Xu9294/fq8cBA+P6AqA==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "npm-run-path": { + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "devOptional": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, - "requires": { - "path-key": "^2.0.0" + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "number-is-nan": { + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.9.0.tgz", - "integrity": "sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^1.0.0", - "convert-source-map": "^1.5.1", - "debug-log": "^1.0.1", - "default-require-extensions": "^1.0.0", - "find-cache-dir": "^0.1.1", - "find-up": "^2.1.0", - "foreground-child": "^1.5.3", - "glob": "^7.0.6", - "istanbul-lib-coverage": "^1.1.2", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^1.10.0", - "istanbul-lib-report": "^1.1.3", - "istanbul-lib-source-maps": "^1.2.3", - "istanbul-reports": "^1.4.0", - "md5-hex": "^1.2.0", - "merge-source-map": "^1.1.0", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.0", - "resolve-from": "^2.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.1", - "spawn-wrap": "^1.4.2", - "test-exclude": "^4.2.0", - "yargs": "11.1.0", - "yargs-parser": "^8.0.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "requires": { - "default-require-extensions": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "async": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "atob": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-generator": { - "version": "6.26.1", - "bundled": true, - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "base": { - "version": "0.11.2", - "bundled": true, - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "caching-transform": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "md5-hex": "^1.2.0", - "mkdirp": "^0.5.1", - "write-file-atomic": "^1.1.4" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "bundled": true, - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "cliui": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "bundled": true, - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "core-js": { - "version": "2.5.6", - "bundled": true, - "dev": true - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "detect-indent": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fragment-cache": { - "version": "0.2.1", - "bundled": true, - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "get-value": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "9.18.0", - "bundled": true, - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "has-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.6.0", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invariant": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "bundled": true, - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-odd": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.1", - "bundled": true, - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "bundled": true, - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "js-tokens": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - }, - "lodash": { - "version": "4.17.10", - "bundled": true, - "dev": true - }, - "longest": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.3", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "map-cache": { - "version": "0.2.2", - "bundled": true, - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5-hex": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "md5-o-matic": "^0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "nanomatch": { - "version": "1.2.9", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "object.pick": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "bundled": true, - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "ret": { - "version": "0.1.15", - "bundled": true, - "dev": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-regex": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "set-value": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "source-map-resolve": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "split-string": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "bundled": true, - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "union-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "bundled": true, - "dev": true - }, - "use": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "y18n": { - "version": "3.2.1", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "11.1.0", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "8.1.0", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - } - } - } + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "node_modules/is-promise": { + "version": "4.0.0", + "license": "MIT" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "4.0.1", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "object-visit": { + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, - "requires": { - "isobject": "^3.0.0" + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/levn": { + "version": "0.4.1", "dev": true, - "requires": { - "isobject": "^3.0.1" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { + "node_modules/load-json-file": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.3.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "devOptional": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "devOptional": true, + "license": "MIT" + }, + "node_modules/minipass": { + "version": "7.1.2", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/mv": { + "version": "2.1.1", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "license": "MIT", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nock": { + "version": "14.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@mswjs/interceptors": "^0.38.7", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">=18.20.0 <20 || >=20.12.1" + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "once": { + "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "opener": { + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/outvariant": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "original": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz", - "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", - "dev": true, - "requires": { - "url-parse": "~1.4.0" + "node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "own-or": { + "node_modules/package-json-from-dist": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true + "license": "BlueOak-1.0.0" }, - "own-or-env": { + "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", "dev": true, - "requires": { - "own-or": "^1.0.0" + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "node_modules/parse-json": { + "version": "4.0.0", "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, + "license": "MIT", "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "node_modules/path-parse": { + "version": "1.0.7", "dev": true, - "requires": { - "through": "~2.3" - } + "license": "MIT" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "node_modules/path-scurry": { + "version": "2.0.0", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.0", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "node_modules/path-to-regexp": { + "version": "8.2.0", + "license": "MIT", + "engines": { + "node": ">=16" + } }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/picomatch": { + "version": "2.3.1", "dev": true, - "requires": { - "pinkie": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "node_modules/pify": { + "version": "4.0.1", "dev": true, - "requires": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "node_modules/pkg-conf": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "propagate": { + "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", - "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" } }, - "proxyquire": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-1.8.0.tgz", - "integrity": "sha1-AtUUpb7ZhvBMuyCTrxZ0FTX3ntw=", + "node_modules/prop-types": { + "version": "15.8.1", "dev": true, - "requires": { - "fill-keys": "^1.0.2", - "module-not-found-error": "^1.0.0", - "resolve": "~1.1.7" + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "node_modules/propagate": { + "version": "2.0.1", "dev": true, - "requires": { - "event-stream": "~3.3.0" + "license": "MIT", + "engines": { + "node": ">= 8" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } }, - "pstree.remy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", - "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", + "node_modules/pstree.remy": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", "dev": true, - "requires": { - "ps-tree": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "node_modules/qs": { + "version": "6.14.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "querystringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", - "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==" + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "node_modules/raw-body": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/react-is": { + "version": "16.13.1", "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "license": "MIT" }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - } + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/regexparam": { + "version": "3.0.0", "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "node_modules/regexpp": { + "version": "3.2.0", "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "node_modules/resolve": { + "version": "1.22.2", "dev": true, - "requires": { - "rc": "^1.0.1" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "node_modules/resolve-from": { + "version": "4.0.0", "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { + "node_modules/rimraf": { "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "requires": { + "license": "ISC", + "optional": true, + "dependencies": { "glob": "^6.0.1" }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "6.0.4", + "license": "ISC", + "optional": true, "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" + "node_modules/router": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" } }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true + "node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "safe-json-stringify": { + "node_modules/safe-json-stringify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "license": "MIT", "optional": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, - "requires": { - "ret": "~0.1.10" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "dev": true + "license": "MIT" }, - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true + "node_modules/semver": { + "version": "7.6.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "node_modules/send": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" } }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/serve-static": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" }, - "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", - "dev": true + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true, - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" - }, - "dependencies": { - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - } + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "node_modules/simple-update-notifier": { + "version": "2.0.0", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "node_modules/standard": { + "version": "17.1.2", "dev": true, - "requires": { - "through": "2" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "eslint": "^8.41.0", + "eslint-config-standard": "17.1.0", + "eslint-config-standard-jsx": "^11.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.36.1", + "standard-engine": "^15.1.0", + "version-guard": "^1.1.1" + }, + "bin": { + "standard": "bin/cmd.cjs" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/standard-engine": { + "version": "15.1.0", "dev": true, - "requires": { - "extend-shallow": "^3.0.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.6", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", - "dev": true - }, - "standard": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/standard/-/standard-6.0.8.tgz", - "integrity": "sha1-sOZl4yJ32jy5nyEmmxBC2B7+sGs=", - "dev": true, - "requires": { - "eslint": "~2.2.0", - "eslint-config-standard": "5.1.0", - "eslint-config-standard-jsx": "1.1.1", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-react": "^4.0.0", - "eslint-plugin-standard": "^1.3.1", - "standard-engine": "^3.3.0", - "xtend": "^4.0.1" - } - }, - "standard-engine": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-3.3.1.tgz", - "integrity": "sha1-sveY3k5NPh+s7UJcgTaDGmZ0CO0=", - "dev": true, - "requires": { - "defaults": "^1.0.2", - "deglob": "^1.0.0", - "find-root": "^1.0.0", - "get-stdin": "^5.0.1", - "minimist": "^1.1.0", - "multiline": "^1.0.2", - "pkg-config": "^1.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/strict-event-emitter": { + "version": "0.5.1", "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", "dev": true, - "requires": { - "duplexer": "~0.1.1" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", "dev": true, - "requires": { - "get-stdin": "^4.0.1" - }, + "license": "MIT", "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "superagent": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", - "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.1.1", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "supertest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.1.0.tgz", - "integrity": "sha512-O44AMnmJqx294uJQjfUmEyYOg7d9mylNFsMw/Wkz4evKd1njyPrtCN+U6ZIC7sKtfEVQhfTqFFijlXx8KP/Czw==", - "dev": true, - "requires": { - "methods": "~1.1.2", - "superagent": "3.8.2" + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "requires": { - "has-flag": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tap": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/tap/-/tap-12.0.1.tgz", - "integrity": "sha512-iEJytWaZy8risvfRjuV4+ST+Lrrui/MW2ZCWn01ZaMn0NKFej4+PpBy6bXGOg9+cEGNmI7d3Sdka/zTUZUGidA==", - "dev": true, - "requires": { - "bind-obj-methods": "^2.0.0", - "bluebird": "^3.5.1", - "clean-yaml-object": "^0.1.0", - "color-support": "^1.1.0", - "coveralls": "^3.0.1", - "foreground-child": "^1.3.3", - "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.1", - "glob": "^7.0.0", - "isexe": "^2.0.0", - "js-yaml": "^3.11.0", - "minipass": "^2.3.0", - "mkdirp": "^0.5.1", - "nyc": "^11.8.0", - "opener": "^1.4.1", - "os-homedir": "^1.0.2", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.0", - "source-map-support": "^0.5.6", - "stack-utils": "^1.0.0", - "tap-mocha-reporter": "^3.0.7", - "tap-parser": "^7.0.0", - "tmatch": "^4.0.0", - "trivial-deferred": "^1.0.1", - "tsame": "^2.0.0", - "write-file-atomic": "^2.3.0", - "yapool": "^1.0.0" - }, - "dependencies": { - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - } + "node_modules/superagent": { + "version": "10.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.4", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" } }, - "tap-mocha-reporter": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.7.tgz", - "integrity": "sha512-GHVXJ38C3oPRpM3YUc43JlGdpVZYiKeT1fmAd3HH2+J+ZWwsNAUFvRRdoGsXLw9+gU9o+zXpBqhS/oXyRQYwlA==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^2.1.3", - "diff": "^1.3.2", - "escape-string-regexp": "^1.0.3", - "glob": "^7.0.5", - "js-yaml": "^3.3.1", - "readable-stream": "^2.1.5", - "tap-parser": "^5.1.0", - "unicode-length": "^1.0.0" - }, - "dependencies": { - "tap-parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", - "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "js-yaml": "^3.2.7", - "readable-stream": "^2" - } - } + "node_modules/supertest": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^10.2.1" + }, + "engines": { + "node": ">=14.18.0" } }, - "tap-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", - "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", + "node_modules/supports-color": { + "version": "5.5.0", "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "js-yaml": "^3.2.7", - "minipass": "^2.2.0" + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, - "requires": { - "execa": "^0.7.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "dev": true, + "license": "MIT" }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "tmatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-4.0.0.tgz", - "integrity": "sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg==", - "dev": true + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/touch": { + "version": "3.1.0", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, + "license": "ISC", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/tsconfig-paths": { + "version": "3.14.2", "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "node_modules/type-check": { + "version": "0.4.0", "dev": true, - "requires": { - "nopt": "~1.0.10" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "^1.4.1" + "node_modules/type-is": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "tsame": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tsame/-/tsame-2.0.0.tgz", - "integrity": "sha512-dAuzcnOPdqZYojylFQzEes95UDjve3HqKrlTCeLZKSDPMTsn3smzHZqsJj/sWD8wOUkg0RD++B11evyLn2+bIw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/typed-array-buffer": { + "version": "1.0.2", "dev": true, - "requires": { - "prelude-ls": "~1.1.2" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, - "requires": { - "debug": "^2.2.0" + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "node_modules/typed-array-length": { + "version": "1.0.6", "dev": true, - "requires": { - "punycode": "^1.3.2", - "strip-ansi": "^3.0.1" - }, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "node_modules/undefsafe": { + "version": "2.0.5", "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } + "license": "MIT" }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "node_modules/universal-user-agent": { + "version": "7.0.3", + "license": "ISC" }, - "unset-value": { + "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "url-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", - "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", - "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "node_modules/version-guard": { + "version": "1.1.1", "dev": true, - "requires": { - "prepend-http": "^1.0.1" + "license": "0BSD", + "engines": { + "node": ">=0.10.48" } }, - "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, - "requires": { - "os-homedir": "^1.0.0" + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "util": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.0.tgz", - "integrity": "sha512-5n12uMzKCjvB2HPFHnbQSjaqAa98L5iIXmHrZCLavuZVe0qe/SJGbDGWlpaHk5lnBkWRDO+dRu1/PgmUYKPPTw==", + "node_modules/which-builtin-type": { + "version": "1.1.4", "dev": true, - "requires": { - "inherits": "2.0.3" + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "util-deprecate": { + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "node_modules/which-typed-array": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "^2.1.1" + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "license": "ISC" }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "node_modules/xdg-basedir": { + "version": "4.0.0", "dev": true, - "requires": { - "mkdirp": "^0.5.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true } } } diff --git a/package.json b/package.json index cfd65bf9..6c271087 100644 --- a/package.json +++ b/package.json @@ -2,39 +2,37 @@ "name": "nodejs-github-bot", "version": "1.0.0-beta1", "description": "Node.js GitHub Bot", + "type": "module", "scripts": { "start": "node server.js | bunyan -o short", - "test": "STATUS=0; tap test/**/*.test.js || STATUS=$?; standard || STATUS=$?; exit $STATUS", + "test": "STATUS=0; node --test test/**/*.test.js || STATUS=$?; standard || STATUS=$?; exit $STATUS", "test:watch": "nodemon -q -x 'npm test'" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 20.11.0" }, "private": true, "license": "MIT", "dependencies": { - "async": "2.1.5", - "basic-auth": "^1.0.4", - "body-parser": "^1.15.0", + "@octokit/rest": "^22.0.0", + "aigle": "^1.14.1", + "basic-auth": "^2.0.1", + "body-parser": "^2.2.0", "bunyan": "^1.8.1", - "bunyan-middleware": "0.8.0", - "debug": "^2.2.0", - "dotenv": "^2.0.0", - "express": "^4.13.4", - "github": "^12.1.0", - "glob": "^7.0.3", - "lru-cache": "^4.0.1", - "request": "^2.72.0" + "bunyan-middleware": "1.0.2", + "codeowners-utils": "^1.0.2", + "debug": "^4.4.1", + "dotenv": "^16.5.0", + "events-async": "^1.2.1", + "express": "^5.1.0", + "glob": "11.0.2" }, "devDependencies": { - "eventsource": "^0.2.1", - "lolex": "^1.5.1", - "nock": "^9.6.1", - "nodemon": "^1.9.1", - "proxyquire": "^1.7.10", - "sinon": "^1.17.6", - "standard": "^6.0.7", - "supertest": "^3.1.0", - "tap": "^12.0.1" + "eventsource": "^4.0.0", + "fetch-mock": "^12.5.2", + "nock": "^14.0.5", + "nodemon": "^3.1.10", + "standard": "^17.1.2", + "supertest": "^7.1.1" } } diff --git a/scripts/attempt-backport.js b/scripts/attempt-backport.js deleted file mode 100644 index 70fb5fa9..00000000 --- a/scripts/attempt-backport.js +++ /dev/null @@ -1,244 +0,0 @@ -'use strict' - -const child_process = require('child_process') -const debug = require('debug')('attempt-backport') -const request = require('request') -const node_repo = require('../lib/node-repo') -const fetchExistingThenUpdatePr = node_repo.fetchExistingThenUpdatePr -const removeLabelFromPR = node_repo.removeLabelFromPR -const getBotPrLabels = node_repo.getBotPrLabels - -const enabledRepos = ['node'] -const nodeVersions = [ - { version: 7 }, - { version: 6, lts: true }, - { version: 4, lts: true } -] -const queue = [] -let inProgress = false - -module.exports = function (app) { - if (!global._node_repo_dir) return - - app.on('pull_request.opened', handlePrUpdate) - // Pull Request updates - app.on('pull_request.synchronize', handlePrUpdate) - - function handlePrUpdate (event, owner, repo) { - if (!~enabledRepos.indexOf(repo)) return - - if (event.pull_request.base.ref !== 'master') return - - const prId = event.number - const options = { owner, repo, prId, logger: event.logger } - - debug(`/${owner}/${repo}/pull/${prId} sync`) - for (const node of nodeVersions) { - queueAttemptBackport(options, node.version, !!node.lts) - } - - if (!inProgress) processNextBackport() - } - - // to trigger polling manually - app.get('/attempt-backport/pr/:owner/:repo/:id', (req, res) => { - const owner = req.params.owner - const repo = req.params.repo - const prId = parseInt(req.params.id, 10) - const options = { owner, repo, prId, logger: req.log } - - if (~enabledRepos.indexOf(repo)) { - for (const node of nodeVersions) { - queueAttemptBackport(options, node.version, !!node.lts) - } - } - - if (!inProgress) processNextBackport() - - res.end() - }) -} - -function processNextBackport () { - const item = queue.shift() - if (!item) return - - if (typeof item !== 'function') { - debug(`item was not a function! - queue size: ${queue.length}`) - return - } else if (inProgress) { - debug(`was still in progress! - queue size: ${queue.length}`) - return - } - item() -} - -function queueAttemptBackport (options, version, isLTS) { - queue.push(function () { - options.logger.debug(`processing a new backport to v${version}`) - attemptBackport(options, version, isLTS, processNextBackport) - }) -} - -function attemptBackport (options, version, isLTS, cb) { - // Start - gitAmAbort() - - function wrapCP (cmd, args, opts, callback) { - let exited = false - - if (arguments.length === 3) { - callback = opts - opts = {} - } - - opts.cwd = global._node_repo_dir - - const cp = child_process.spawn(cmd, args, opts) - const argsString = [cmd, ...args].join(' ') - - cp.on('error', function (err) { - debug(`child_process err: ${err}`) - if (!exited) onError() - }) - cp.on('exit', function (code) { - exited = true - if (!cb) { - debug(`error before exit, code: ${code}, on '${argsString}'`) - return - } else if (code > 0) { - debug(`exit code > 0: ${code}, on '${argsString}'`) - onError() - return - } - callback() - }) - // Useful when debugging. - - cp.stdout.on('data', (data) => { - options.logger.debug(data.toString()) - }) - cp.stderr.on('data', (data) => { - options.logger.debug(data.toString()) - }) - - return cp - } - - function onError () { - if (!cb) return - const _cb = cb - setImmediate(() => { - options.logger.debug(`backport to ${version} failed`) - - if (!isLTS) { - options.logger.debug(`Should have added (but temporary disabled): dont-land-on-v${version}.x`) - } else { - getBotPrLabels(options, (err, ourLabels) => { - if (err) { - options.logger.error(err, 'Error fetching existing bot labels') - return - } - - const label = `lts-watch-v${version}.x` - if (!ourLabels.includes(label)) return - - removeLabelFromPR(options, label) - }) - } - - setImmediate(() => { - inProgress = false - _cb() - }) - }) - cb = null - } - - function gitAmAbort () { - // TODO(Fishrock123): this should probably just merge into wrapCP - let exited = false - options.logger.debug('aborting any previous backport attempt...') - - const cp = child_process.spawn('git', ['am', '--abort'], { cwd: global._node_repo_dir }) - const argsString = 'git am --abort' - - cp.on('error', function (err) { - debug(`child_process err: ${err}`) - if (!exited) onError() - }) - cp.on('exit', function (code) { - exited = true - if (!cb) { - debug(`error before exit, code: ${code}, on '${argsString}'`) - return - } - gitRemoteUpdate() - }) - } - - function gitRemoteUpdate () { - options.logger.debug('updating git remotes...') - wrapCP('git', ['remote', 'update', '-p'], gitCheckout) - } - - function gitCheckout () { - options.logger.debug(`checking out origin/v${version}.x-staging...`) - wrapCP('git', ['checkout', `origin/v${version}.x-staging`], gitClean_fdx) - } - - function gitClean_fdx () { - wrapCP('git', ['clean', '-fdx'], fetchDiff) - } - - function fetchDiff () { - options.logger.debug(`fetching diff from pr ${options.prId}...`) - - const url = `https://patch-diff.githubusercontent.com/raw/${options.owner}/${options.repo}/pull/${options.prId}.patch` - - const req = request(url) - - req.on('error', function (err) { - debug(`request err: ${err}`) - return onError() - }) - req.on('response', function (response) { - if (response.statusCode !== 200) { - debug(`request non-200 status: ${response.statusCode}`) - return onError() - } - }) - - gitAttemptBackport(req) - } - - function gitAttemptBackport (req) { - options.logger.debug(`attempting a backport to v${version}...`) - const cp = wrapCP('git', ['am', '-3'], { stdio: 'pipe' }, function done () { - // Success! - if (isLTS) { - fetchExistingThenUpdatePr(options, [`lts-watch-v${version}.x`]) - } else { - getBotPrLabels(options, (err, ourLabels) => { - if (err) { - options.logger.error(err, 'Error fetching existing bot labels') - return - } - - const label = `dont-land-on-v${version}.x` - if (!ourLabels.includes(label)) return - - removeLabelFromPR(options, label) - }) - } - - setImmediate(() => { - options.logger.debug(`backport to v${version} successful`) - inProgress = false - cb() - }) - }) - - req.pipe(cp.stdin) - } -} diff --git a/scripts/event-relay.js b/scripts/event-relay.js new file mode 100644 index 00000000..7fc73e40 --- /dev/null +++ b/scripts/event-relay.js @@ -0,0 +1,23 @@ +import githubClient from '../lib/github-client.js' + +async function handleJenkinsRelay (event) { + const { owner, repo, identifier } = event + const eventType = `jenkins.${identifier}.${event.event}` + try { + event.logger.debug(`Relaying ${eventType} to ${owner}/${repo}`) + await githubClient.repos.createDispatchEvent({ + owner, + repo, + event_type: eventType, + client_payload: event + }) + return true + } catch (err) { + event.logger.error(err, `Failed to relay ${eventType} to ${owner}/${repo}`) + return false + } +} + +export default function (_, event) { + event.on('jenkins', handleJenkinsRelay) +} diff --git a/scripts/jenkins-status.js b/scripts/jenkins-status.js index 0b7361b1..1cb6d275 100644 --- a/scripts/jenkins-status.js +++ b/scripts/jenkins-status.js @@ -1,82 +1,34 @@ -'use strict' +import * as pushJenkinsUpdate from '../lib/push-jenkins-update.js' -const pushJenkinsUpdate = require('../lib/push-jenkins-update') -const enabledRepos = ['citgm', 'http-parser', 'node'] +function handleJenkinsStart (event) { + const { repo, owner } = event -const jenkinsIpWhitelist = process.env.JENKINS_WORKER_IPS ? process.env.JENKINS_WORKER_IPS.split(',') : [] - -function isJenkinsIpWhitelisted (req) { - const ip = req.connection.remoteAddress.split(':').pop() - - if (jenkinsIpWhitelist.length && !jenkinsIpWhitelist.includes(ip)) { - req.log.warn({ ip }, 'Ignoring, not allowed to push Jenkins updates') - return false - } - - return true -} - -function isRelatedToPullRequest (gitRef) { - // refs/pull/12345/head vs refs/heads/v8.x-staging/head - return gitRef.includes('/pull/') -} - -module.exports = function (app) { - app.post('/:repo/jenkins/start', (req, res) => { - const isValid = pushJenkinsUpdate.validate(req.body) - const repo = req.params.repo - - if (!isValid) { - return res.status(400).end('Invalid payload') - } - - if (!isRelatedToPullRequest(req.body.ref)) { - return res.status(400).end('Will only push builds related to pull requests') - } - - if (!enabledRepos.includes(repo)) { - return res.status(400).end('Invalid repository') - } - - if (!isJenkinsIpWhitelisted(req)) { - return res.status(401).end('Invalid Jenkins IP') + pushJenkinsUpdate.pushStarted({ + owner, + repo, + logger: event.logger + }, event, (err) => { + if (err) { + event.logger.error(err, 'Error while handling Jenkins start event') } - - pushJenkinsUpdate.pushStarted({ - owner: 'nodejs', - repo, - logger: req.log - }, req.body) - - res.status(201).end() }) +} - app.post('/:repo/jenkins/end', (req, res) => { - const isValid = pushJenkinsUpdate.validate(req.body) - const repo = req.params.repo - - if (!isValid) { - return res.status(400).end('Invalid payload') - } - - if (!isRelatedToPullRequest(req.body.ref)) { - return res.status(400).end('Will only push builds related to pull requests') - } - - if (!enabledRepos.includes(repo)) { - return res.status(400).end('Invalid repository') - } +function handleJenkinsStop (event) { + const { repo, owner } = event - if (!isJenkinsIpWhitelisted(req)) { - return res.status(401).end('Invalid Jenkins IP') + pushJenkinsUpdate.pushEnded({ + owner, + repo, + logger: event.logger + }, event, (err) => { + if (err) { + event.logger.error(err, 'Error while handling Jenkins end event') } - - pushJenkinsUpdate.pushEnded({ - owner: 'nodejs', - repo, - logger: req.log - }, req.body) - - res.status(201).end() }) } + +export default function (_, event) { + event.on('jenkins.start', handleJenkinsStart) + event.on('jenkins.end', handleJenkinsStop) +} diff --git a/scripts/node-ping-owners.js b/scripts/node-ping-owners.js new file mode 100644 index 00000000..ac8c7d99 --- /dev/null +++ b/scripts/node-ping-owners.js @@ -0,0 +1,27 @@ +import debugLib from 'debug' + +import * as nodeRepo from '../lib/node-repo.js' + +const debug = debugLib('node_ping_owners') + +export default function (app, events) { + events.on('pull_request.opened', handlePrCreated) +} + +function handlePrCreated (event, owner, repo) { + const prId = event.number + const logger = event.logger + const baseBranch = event.pull_request.base.ref + + debug(`/${owner}/${repo}/pull/${prId} opened`) + nodeRepo.resolveOwnersThenPingPr({ + owner, + repo, + prId, + logger, + baseBranch, + timeoutInSec: 2 + }).catch(err => { + event.logger.error(err, 'owners ping failed') + }) +} diff --git a/scripts/node-subsystem-label.js b/scripts/node-subsystem-label.js deleted file mode 100644 index ba4d410f..00000000 --- a/scripts/node-subsystem-label.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict' - -const debug = require('debug')('node_subsystem_label') - -const nodeRepo = require('../lib/node-repo') - -module.exports = function (app) { - app.on('pull_request.opened', handlePrCreated) - - function handlePrCreated (event, owner, repo) { - const prId = event.number - const logger = event.logger - const baseBranch = event.pull_request.base.ref - - // subsystem labelling is for node core only - if (repo !== 'node') return - - debug(`/${owner}/${repo}/pull/${prId} opened`) - // by not hard coding the owner repo to nodejs/node here, - // we can test these this script in a different repo than - // *actual* node core as long as the repo is named "node" - nodeRepo.resolveLabelsThenUpdatePr({ - owner, - repo, - prId, - logger, - baseBranch, - timeoutInSec: 2 - }) - } -} diff --git a/scripts/ping.js b/scripts/ping.js index a0dbd53d..2a1d4d6b 100644 --- a/scripts/ping.js +++ b/scripts/ping.js @@ -1,6 +1,4 @@ -'use strict' - -module.exports = function (app) { +export default function (app) { app.get('/ping', (req, res) => { res.end('pong') }) diff --git a/scripts/trigger-jenkins-build.js b/scripts/trigger-jenkins-build.js deleted file mode 100644 index c819400a..00000000 --- a/scripts/trigger-jenkins-build.js +++ /dev/null @@ -1,159 +0,0 @@ -'use strict' - -const request = require('request') - -const githubClient = require('../lib/github-client') -const botUsername = require('../lib/bot-username') - -const jenkinsApiCredentials = process.env.JENKINS_API_CREDENTIALS || '' - -function ifBotWasMentionedInCiComment (commentBody, cb) { - botUsername.resolve((err, username) => { - if (err) { - return cb(err) - } - - const atBotName = new RegExp(`^@${username} run CI`, 'mi') - const wasMentioned = commentBody.match(atBotName) !== null - - cb(null, wasMentioned) - }) -} - -// Name for the Jenkins job should be triggered for a given repository -function getJobNameForRepo (repo) { - // e.g. JENKINS_JOB_CITGM = node-test-pull-request-lite-pipeline - return process.env[`JENKINS_JOB_${repo.toUpperCase()}`] || '' -} - -// Authentication token configured per Jenkins job needed when triggering a build, -// this is set per job in Configure -> Build Triggers -> Trigger builds remotely -function buildTokenForRepo (repo) { - // e.g. JENKINS_BUILD_TOKEN_CITGM - return process.env[`JENKINS_BUILD_TOKEN_${repo.toUpperCase()}`] || '' -} - -function buildParametersForRepo (options, repo) { - if (repo === 'citgm') { - return [{ - name: 'GIT_REMOTE_REF', - value: `refs/pull/${options.number}/head` - }] - } else { - return [ - { name: 'CERTIFY_SAFE', value: 'true' }, - { name: 'GITHUB_ORG', value: 'nodejs' }, - { name: 'REPO_NAME', value: 'node' }, - { name: 'PR_ID', value: options.number }, - { name: 'REBASE_ONTO', value: '' } - ] - } -} - -function triggerBuild (options, cb) { - const { repo } = options - const base64Credentials = new Buffer(jenkinsApiCredentials).toString('base64') - const authorization = `Basic ${base64Credentials}` - - const jobName = getJobNameForRepo(repo) - const buildAuthToken = buildTokenForRepo(repo) - - if (!jobName) { - return cb(new TypeError(`Will not trigger Jenkins build because $JENKINS_JOB_${repo.toUpperCase()} is not set`)) - } - - if (!buildAuthToken) { - return cb(new TypeError(`Will not trigger Jenkins build because $JENKINS_BUILD_TOKEN_${repo.toUpperCase()} is not set`)) - } - - options.logger.debug('Triggering Jenkins build') - - request.post({ - uri: `https://ci.nodejs.org/blue/rest/organizations/jenkins/pipelines/${jobName}/runs/`, - headers: { authorization }, - qs: { token: buildAuthToken }, - json: { parameters: buildParametersForRepo(options, repo) } - }, (err, response) => { - if (err) { - return cb(err) - } else if (response.statusCode !== 200) { - return cb(new Error(`Expected 200 from Jenkins, got ${response.statusCode}`)) - } - - cb(null, - `https://ci.nodejs.org/blue/organizations/jenkins/${jobName}/detail/${jobName}/${response.body.id}/pipeline`) - }) -} - -function createPrComment ({ owner, repo, number, logger }, body) { - githubClient.issues.createComment({ - owner, - repo, - number, - body - }, (err) => { - if (err) { - logger.error(err, 'Error while creating comment to reply on CI run comment') - } - }) -} - -function triggerBuildIfValid (options) { - const { owner, repo, author, logger } = options - - githubClient.repos.checkCollaborator({ owner, repo, username: author }, function onResponse (err) { - if (err) { - return logger.debug(`Ignoring comment to me by @${options.author} because they are not a repo collaborator`) - } - - triggerBuild(options, function onBuildTriggered (err, buildUrl) { - if (err) { - logger.error(err, 'Error while triggering Jenkins build') - return createPrComment(options, `@${options.author} sadly an error occured when I tried to trigger a build :(`) - } - - createPrComment(options, `@${options.author} build started: ${buildUrl}`) - logger.info({ buildUrl }, 'Jenkins build started') - }) - }) -} - -module.exports = (app) => { - app.on('issue_comment.created', function handleCommentCreated (event, owner, repo) { - const { number, logger, comment } = event - const commentAuthor = comment.user.login - const options = { - owner, - repo, - number, - logger, - author: commentAuthor - } - - ifBotWasMentionedInCiComment(comment.body, (err, wasMentioned) => { - if (err) { - return logger.error(err, 'Error while checking if the bot username was mentioned in a comment') - } - - if (!wasMentioned) return - - triggerBuildIfValid(options) - }) - }) - - app.on('pull_request.opened', function handlePullCreated (event, owner, repo) { - const { number, logger, pull_request } = event - const pullRequestAuthor = pull_request.user.login - const options = { - owner, - repo, - number, - logger, - author: pullRequestAuthor - } - - if (repo === 'node') { - triggerBuildIfValid(options) - } - }) -} diff --git a/server.js b/server.js index 801b4809..71b3961b 100644 --- a/server.js +++ b/server.js @@ -1,24 +1,20 @@ -'use strict' +import 'dotenv/config' -const child_process = require('child_process') +import { globSync } from 'glob' +import logger from './lib/logger.js' +import { app, events } from './app.js' -if (process.env.NODE_REPO_DIR) { - const fs = require('fs') - global._node_repo_dir = fs.realpathSync(process.env.NODE_REPO_DIR) - const out = child_process.spawnSync('git', ['status'], { cwd: global._node_repo_dir }) - - if (out.status !== 0) { - logger.info(out.stdout) - logger.error(out.stderr) - logger.error('Bad NODE_REPO_DIR. Backport patch testing disabled.') - global._node_repo_dir = false - } +const port = process.env.PORT || 3000 +const scriptsToLoad = process.env.SCRIPTS || './scripts/**/*.js' + +// load all the files in the scripts folder +const files = globSync(scriptsToLoad, { dotRelative: true }) +for (const file of files) { + logger.info('Loading:', file) + const { default: extend } = await import(file) + extend(app, events) } -const app = require('./app') -const logger = require('./lib/logger') - -const port = process.env.PORT || 3000 app.listen(port, () => { logger.info('Listening on port', port) }) diff --git a/test/_fixtures/CODEOWNERS b/test/_fixtures/CODEOWNERS new file mode 100644 index 00000000..8ddf2cf0 --- /dev/null +++ b/test/_fixtures/CODEOWNERS @@ -0,0 +1,8 @@ +/file1 @nodejs/test1 +/file2 @nodejs/test2 +/file3 @nodejs/test1 @nodejs/test2 +/file4 @nodejs/test1 +/file5 @nodejs/test3 +/folder1/* @nodejs/test3 +/folder2/file1.* @nodejs/test4 @nodejs/test5 +/lib/timers.js @nodejs/team @nodejs/team2 diff --git a/test/_fixtures/get-repository.json b/test/_fixtures/get-repository.json new file mode 100644 index 00000000..1d64f028 --- /dev/null +++ b/test/_fixtures/get-repository.json @@ -0,0 +1,132 @@ +{ + "id": 108083039, + "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwODMwMzk=", + "name": "node-auto-test", + "full_name": "nodejs/node-auto-test", + "private": false, + "owner": { + "login": "nodejs", + "id": 9950313, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjk5NTAzMTM=", + "avatar_url": "https://avatars3.githubusercontent.com/u/9950313?v=4", + "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 + }, + "html_url": "https://github.com/nodejs/node-auto-test", + "description": "Node.js clone for testing automation tools", + "fork": false, + "url": "https://api.github.com/repos/nodejs/node-auto-test", + "forks_url": "https://api.github.com/repos/nodejs/node-auto-test/forks", + "keys_url": "https://api.github.com/repos/nodejs/node-auto-test/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nodejs/node-auto-test/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nodejs/node-auto-test/teams", + "hooks_url": "https://api.github.com/repos/nodejs/node-auto-test/hooks", + "issue_events_url": "https://api.github.com/repos/nodejs/node-auto-test/issues/events{/number}", + "events_url": "https://api.github.com/repos/nodejs/node-auto-test/events", + "assignees_url": "https://api.github.com/repos/nodejs/node-auto-test/assignees{/user}", + "branches_url": "https://api.github.com/repos/nodejs/node-auto-test/branches{/branch}", + "tags_url": "https://api.github.com/repos/nodejs/node-auto-test/tags", + "blobs_url": "https://api.github.com/repos/nodejs/node-auto-test/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nodejs/node-auto-test/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nodejs/node-auto-test/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nodejs/node-auto-test/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nodejs/node-auto-test/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nodejs/node-auto-test/languages", + "stargazers_url": "https://api.github.com/repos/nodejs/node-auto-test/stargazers", + "contributors_url": "https://api.github.com/repos/nodejs/node-auto-test/contributors", + "subscribers_url": "https://api.github.com/repos/nodejs/node-auto-test/subscribers", + "subscription_url": "https://api.github.com/repos/nodejs/node-auto-test/subscription", + "commits_url": "https://api.github.com/repos/nodejs/node-auto-test/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nodejs/node-auto-test/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nodejs/node-auto-test/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nodejs/node-auto-test/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nodejs/node-auto-test/contents/{+path}", + "compare_url": "https://api.github.com/repos/nodejs/node-auto-test/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nodejs/node-auto-test/merges", + "archive_url": "https://api.github.com/repos/nodejs/node-auto-test/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nodejs/node-auto-test/downloads", + "issues_url": "https://api.github.com/repos/nodejs/node-auto-test/issues{/number}", + "pulls_url": "https://api.github.com/repos/nodejs/node-auto-test/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nodejs/node-auto-test/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nodejs/node-auto-test/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nodejs/node-auto-test/labels{/name}", + "releases_url": "https://api.github.com/repos/nodejs/node-auto-test/releases{/id}", + "deployments_url": "https://api.github.com/repos/nodejs/node-auto-test/deployments", + "created_at": "2017-10-24T05:54:55Z", + "updated_at": "2020-07-07T23:21:44Z", + "pushed_at": "2020-07-12T14:38:35Z", + "git_url": "git://github.com/nodejs/node-auto-test.git", + "ssh_url": "git@github.com:nodejs/node-auto-test.git", + "clone_url": "https://github.com/nodejs/node-auto-test.git", + "svn_url": "https://github.com/nodejs/node-auto-test", + "homepage": "", + "size": 452674, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 12, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "forks": 12, + "open_issues": 4, + "watchers": 7, + "default_branch": "master", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "temp_clone_token": "", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "delete_branch_on_merge": false, + "organization": { + "login": "nodejs", + "id": 9950313, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjk5NTAzMTM=", + "avatar_url": "https://avatars3.githubusercontent.com/u/9950313?v=4", + "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 + }, + "network_count": 12, + "subscribers_count": 67 +} diff --git a/test/_fixtures/jenkins-test-pull-request-success-payload.json b/test/_fixtures/jenkins-test-pull-request-success-payload.json new file mode 100644 index 00000000..c0726ee6 --- /dev/null +++ b/test/_fixtures/jenkins-test-pull-request-success-payload.json @@ -0,0 +1,8 @@ +{ + "identifier": "node-test-pull-request", + "status": "pending", + "message": "running tests", + "commit": "8a5fec2a6bade91e544a30314d7cf21f8a200de1", + "url": "https://ci.nodejs.org/job/node-test-pull-request/21633/", + "ref": "refs/pull/12345/head" +} diff --git a/test/_fixtures/pull-request-commits-page-1.json b/test/_fixtures/pull-request-commits-page-1.json new file mode 100644 index 00000000..a774e9db --- /dev/null +++ b/test/_fixtures/pull-request-commits-page-1.json @@ -0,0 +1,2335 @@ +[ + { + "sha": "45df0ee7171cf5f9642fb755be1b24075192347c", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NDVkZjBlZTcxNzFjZjVmOTY0MmZiNzU1YmUxYjI0MDc1MTkyMzQ3Yw==", + "commit": { + "author": { + "name": "Jaideep Bajwa", + "email": "bjaideep@ca.ibm.com", + "date": "2016-11-01T06:53:37Z" + }, + "committer": { + "name": "Myles Borins", + "email": "myles.borins@gmail.com", + "date": "2016-11-11T15:48:36Z" + }, + "message": "v8: update make-v8.sh to use git\n\ngoogle build tool gclient doesn't support\nsvn anymore. Updating v8 build script to use\ngit instead.\n\nPR-URL: https://github.com/nodejs/node/pull/9393\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Ben Noordhuis \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "42de90a38ab9499bad7d34a472584b164cc4640c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/42de90a38ab9499bad7d34a472584b164cc4640c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/45df0ee7171cf5f9642fb755be1b24075192347c", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/45df0ee7171cf5f9642fb755be1b24075192347c", + "html_url": "https://github.com/nodejs/node/commit/45df0ee7171cf5f9642fb755be1b24075192347c", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/45df0ee7171cf5f9642fb755be1b24075192347c/comments", + "author": { + "login": "jbajwa", + "id": 577562, + "node_id": "MDQ6VXNlcjU3NzU2Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/577562?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jbajwa", + "html_url": "https://github.com/jbajwa", + "followers_url": "https://api.github.com/users/jbajwa/followers", + "following_url": "https://api.github.com/users/jbajwa/following{/other_user}", + "gists_url": "https://api.github.com/users/jbajwa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbajwa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbajwa/subscriptions", + "organizations_url": "https://api.github.com/users/jbajwa/orgs", + "repos_url": "https://api.github.com/users/jbajwa/repos", + "events_url": "https://api.github.com/users/jbajwa/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbajwa/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "MylesBorins", + "id": 498775, + "node_id": "MDQ6VXNlcjQ5ODc3NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/498775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MylesBorins", + "html_url": "https://github.com/MylesBorins", + "followers_url": "https://api.github.com/users/MylesBorins/followers", + "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", + "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", + "organizations_url": "https://api.github.com/users/MylesBorins/orgs", + "repos_url": "https://api.github.com/users/MylesBorins/repos", + "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", + "received_events_url": "https://api.github.com/users/MylesBorins/received_events", + "type": "User", + "site_admin": true + }, + "parents": [ + { + "sha": "3daf11635dc8e0cf48110514000fd550ed79a425", + "url": "https://api.github.com/repos/nodejs/node/commits/3daf11635dc8e0cf48110514000fd550ed79a425", + "html_url": "https://github.com/nodejs/node/commit/3daf11635dc8e0cf48110514000fd550ed79a425" + } + ] + }, + { + "sha": "33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzNiY2Q2ZmVjOGE2MTVlNGZlNjU5MTJlYWFhYTJjZWM0NWQ3ODFiYg==", + "commit": { + "author": { + "name": "Michaël Zasso", + "email": "targos@protonmail.com", + "date": "2016-11-02T10:28:09Z" + }, + "committer": { + "name": "Myles Borins", + "email": "myles.borins@gmail.com", + "date": "2016-11-11T15:49:21Z" + }, + "message": "deps: update V8 to 5.4.500.41\n\nPR-URL: https://github.com/nodejs/node/pull/9412\nReviewed-By: James M Snell \nReviewed-By: Michael Dawson \nReviewed-By: Colin Ihrig \nReviewed-By: Ali Ijaz Sheikh \nReviewed-By: Ben Noordhuis \nReviewed-By: Franziska Hinkelmann ", + "tree": { + "sha": "d43f807a05457541ca0918db40f77b9529893e5c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/d43f807a05457541ca0918db40f77b9529893e5c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "html_url": "https://github.com/nodejs/node/commit/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb/comments", + "author": { + "login": "targos", + "id": 2352663, + "node_id": "MDQ6VXNlcjIzNTI2NjM=", + "avatar_url": "https://avatars.githubusercontent.com/u/2352663?v=4", + "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 + }, + "committer": { + "login": "MylesBorins", + "id": 498775, + "node_id": "MDQ6VXNlcjQ5ODc3NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/498775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MylesBorins", + "html_url": "https://github.com/MylesBorins", + "followers_url": "https://api.github.com/users/MylesBorins/followers", + "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", + "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", + "organizations_url": "https://api.github.com/users/MylesBorins/orgs", + "repos_url": "https://api.github.com/users/MylesBorins/repos", + "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", + "received_events_url": "https://api.github.com/users/MylesBorins/received_events", + "type": "User", + "site_admin": true + }, + "parents": [ + { + "sha": "45df0ee7171cf5f9642fb755be1b24075192347c", + "url": "https://api.github.com/repos/nodejs/node/commits/45df0ee7171cf5f9642fb755be1b24075192347c", + "html_url": "https://github.com/nodejs/node/commit/45df0ee7171cf5f9642fb755be1b24075192347c" + } + ] + }, + { + "sha": "6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NmIwMWJmYTlkNmU1ODJlYTViMDU3YWMwNDM1Y2M1NjVkM2NhNGUyOQ==", + "commit": { + "author": { + "name": "Johan Bergström", + "email": "bugs@bergstroem.nu", + "date": "2016-10-25T16:26:46Z" + }, + "committer": { + "name": "Myles Borins", + "email": "myles.borins@gmail.com", + "date": "2016-11-11T15:52:08Z" + }, + "message": "gitignore: ignore all tap files\n\nWe now have multiple tap producers; just ignore all\nfiles with the `.tap` extension.\n\nPR-URL: https://github.com/nodejs/node/pull/9262\nReviewed-By: Gibson Fahnestock \nReviewed-By: Ben Noordhuis \nReviewed-By: Myles Borins ", + "tree": { + "sha": "302c30e2e61b4f6bb5c92ab19cf35f0cbcd088c4", + "url": "https://api.github.com/repos/nodejs/node/git/trees/302c30e2e61b4f6bb5c92ab19cf35f0cbcd088c4" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "html_url": "https://github.com/nodejs/node/commit/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29/comments", + "author": { + "login": "jbergstroem", + "id": 176984, + "node_id": "MDQ6VXNlcjE3Njk4NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/176984?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jbergstroem", + "html_url": "https://github.com/jbergstroem", + "followers_url": "https://api.github.com/users/jbergstroem/followers", + "following_url": "https://api.github.com/users/jbergstroem/following{/other_user}", + "gists_url": "https://api.github.com/users/jbergstroem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbergstroem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbergstroem/subscriptions", + "organizations_url": "https://api.github.com/users/jbergstroem/orgs", + "repos_url": "https://api.github.com/users/jbergstroem/repos", + "events_url": "https://api.github.com/users/jbergstroem/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbergstroem/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "MylesBorins", + "id": 498775, + "node_id": "MDQ6VXNlcjQ5ODc3NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/498775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MylesBorins", + "html_url": "https://github.com/MylesBorins", + "followers_url": "https://api.github.com/users/MylesBorins/followers", + "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", + "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", + "organizations_url": "https://api.github.com/users/MylesBorins/orgs", + "repos_url": "https://api.github.com/users/MylesBorins/repos", + "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", + "received_events_url": "https://api.github.com/users/MylesBorins/received_events", + "type": "User", + "site_admin": true + }, + "parents": [ + { + "sha": "33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "url": "https://api.github.com/repos/nodejs/node/commits/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb", + "html_url": "https://github.com/nodejs/node/commit/33bcd6fec8a615e4fe65912eaaaa2cec45d781bb" + } + ] + }, + { + "sha": "23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MjM1ODRlNGVjNWZkNDdlMjBmNmExMTM5NWI1ZTY3MmUyMDNmYzFhYg==", + "commit": { + "author": { + "name": "Johan Bergström", + "email": "bugs@bergstroem.nu", + "date": "2016-10-25T15:23:48Z" + }, + "committer": { + "name": "Myles Borins", + "email": "myles.borins@gmail.com", + "date": "2016-11-11T15:52:12Z" + }, + "message": "gtest: output tap comments as yamlish\n\nThis makes yaml-ish parsers happy.\nNote: gtest still seems to output the expected/result slightly\ndifferent making the full traceback less informational.\n\nPR-URL: https://github.com/nodejs/node/pull/9262\nReviewed-By: Gibson Fahnestock \nReviewed-By: Ben Noordhuis \nReviewed-By: Myles Borins ", + "tree": { + "sha": "cb02fca48a95c89682b6e148e6e0e56a0dfa9fd4", + "url": "https://api.github.com/repos/nodejs/node/git/trees/cb02fca48a95c89682b6e148e6e0e56a0dfa9fd4" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "html_url": "https://github.com/nodejs/node/commit/23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/23584e4ec5fd47e20f6a11395b5e672e203fc1ab/comments", + "author": { + "login": "jbergstroem", + "id": 176984, + "node_id": "MDQ6VXNlcjE3Njk4NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/176984?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jbergstroem", + "html_url": "https://github.com/jbergstroem", + "followers_url": "https://api.github.com/users/jbergstroem/followers", + "following_url": "https://api.github.com/users/jbergstroem/following{/other_user}", + "gists_url": "https://api.github.com/users/jbergstroem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbergstroem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbergstroem/subscriptions", + "organizations_url": "https://api.github.com/users/jbergstroem/orgs", + "repos_url": "https://api.github.com/users/jbergstroem/repos", + "events_url": "https://api.github.com/users/jbergstroem/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbergstroem/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "MylesBorins", + "id": 498775, + "node_id": "MDQ6VXNlcjQ5ODc3NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/498775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MylesBorins", + "html_url": "https://github.com/MylesBorins", + "followers_url": "https://api.github.com/users/MylesBorins/followers", + "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", + "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", + "organizations_url": "https://api.github.com/users/MylesBorins/orgs", + "repos_url": "https://api.github.com/users/MylesBorins/repos", + "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", + "received_events_url": "https://api.github.com/users/MylesBorins/received_events", + "type": "User", + "site_admin": true + }, + "parents": [ + { + "sha": "6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "url": "https://api.github.com/repos/nodejs/node/commits/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29", + "html_url": "https://github.com/nodejs/node/commit/6b01bfa9d6e582ea5b057ac0435cc565d3ca4e29" + } + ] + }, + { + "sha": "6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NmE5NGZmYjFjZmRiNDFjMDc0NmQ2MDU1ZTJmYTNhYzJmOTk1ZjRkZQ==", + "commit": { + "author": { + "name": "Johan Bergström", + "email": "bugs@bergstroem.nu", + "date": "2016-10-12T14:34:28Z" + }, + "committer": { + "name": "Myles Borins", + "email": "myles.borins@gmail.com", + "date": "2016-11-11T15:52:17Z" + }, + "message": "test: output tap13 instead of almost-tap\n\nProduce a tap13-compatible output which makes it\nsimpler to parse. Output is still readable by\nthe jenkins tap plugin.\n\nPR-URL: https://github.com/nodejs/node/pull/9262\nReviewed-By: Gibson Fahnestock \nReviewed-By: Ben Noordhuis \nReviewed-By: Myles Borins ", + "tree": { + "sha": "3ff5006b93047e6ad08d40385a17af4bca89b664", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3ff5006b93047e6ad08d40385a17af4bca89b664" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "html_url": "https://github.com/nodejs/node/commit/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de/comments", + "author": { + "login": "jbergstroem", + "id": 176984, + "node_id": "MDQ6VXNlcjE3Njk4NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/176984?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jbergstroem", + "html_url": "https://github.com/jbergstroem", + "followers_url": "https://api.github.com/users/jbergstroem/followers", + "following_url": "https://api.github.com/users/jbergstroem/following{/other_user}", + "gists_url": "https://api.github.com/users/jbergstroem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbergstroem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbergstroem/subscriptions", + "organizations_url": "https://api.github.com/users/jbergstroem/orgs", + "repos_url": "https://api.github.com/users/jbergstroem/repos", + "events_url": "https://api.github.com/users/jbergstroem/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbergstroem/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "MylesBorins", + "id": 498775, + "node_id": "MDQ6VXNlcjQ5ODc3NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/498775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MylesBorins", + "html_url": "https://github.com/MylesBorins", + "followers_url": "https://api.github.com/users/MylesBorins/followers", + "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", + "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", + "organizations_url": "https://api.github.com/users/MylesBorins/orgs", + "repos_url": "https://api.github.com/users/MylesBorins/repos", + "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", + "received_events_url": "https://api.github.com/users/MylesBorins/received_events", + "type": "User", + "site_admin": true + }, + "parents": [ + { + "sha": "23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "url": "https://api.github.com/repos/nodejs/node/commits/23584e4ec5fd47e20f6a11395b5e672e203fc1ab", + "html_url": "https://github.com/nodejs/node/commit/23584e4ec5fd47e20f6a11395b5e672e203fc1ab" + } + ] + }, + { + "sha": "f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZjBkNDBlOGJlMzdhZjNhMDA4ZTIyMjNmYWVmYmViNTg5OWJhOTVkOQ==", + "commit": { + "author": { + "name": "Daniel Bevenius", + "email": "daniel.bevenius@gmail.com", + "date": "2016-11-05T14:37:36Z" + }, + "committer": { + "name": "Myles Borins", + "email": "mborins@us.ibm.com", + "date": "2016-11-15T20:53:28Z" + }, + "message": "doc: fix link to cli.md in vm.md\n\nLooks like the link to cli.md is missing in vm.md:\nhttps://nodejs.org/api/vm.html#vm_vm_runindebugcontext_code\n\nAdded the link which can be verified by using the following commands:\n$ make doc\n$ open out/doc/api/vm.html\n\nPR-URL: https://github.com/nodejs/node/pull/9481\nReviewed-By: James M Snell \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "5910ebcc51b1658331b6ec21ebff5254523de30d", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5910ebcc51b1658331b6ec21ebff5254523de30d" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "html_url": "https://github.com/nodejs/node/commit/f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/f0d40e8be37af3a008e2223faefbeb5899ba95d9/comments", + "author": { + "login": "danbev", + "id": 432351, + "node_id": "MDQ6VXNlcjQzMjM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/432351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/danbev", + "html_url": "https://github.com/danbev", + "followers_url": "https://api.github.com/users/danbev/followers", + "following_url": "https://api.github.com/users/danbev/following{/other_user}", + "gists_url": "https://api.github.com/users/danbev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danbev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danbev/subscriptions", + "organizations_url": "https://api.github.com/users/danbev/orgs", + "repos_url": "https://api.github.com/users/danbev/repos", + "events_url": "https://api.github.com/users/danbev/events{/privacy}", + "received_events_url": "https://api.github.com/users/danbev/received_events", + "type": "User", + "site_admin": false + }, + "committer": null, + "parents": [ + { + "sha": "6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "url": "https://api.github.com/repos/nodejs/node/commits/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de", + "html_url": "https://github.com/nodejs/node/commit/6a94ffb1cfdb41c0746d6055e2fa3ac2f995f4de" + } + ] + }, + { + "sha": "ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZWU2NWI0ODcyZGUyMzU3YTIzOWM3Y2NmYTY0YWFkNTRiOGIzYzc5Ng==", + "commit": { + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com", + "date": "2016-11-12T21:08:59Z" + }, + "committer": { + "name": "Myles Borins", + "email": "mborins@us.ibm.com", + "date": "2016-11-16T19:11:53Z" + }, + "message": "tls: fix leak of WriteWrap+TLSWrap combination\n\nWriting data to TLSWrap instance during handshake will result in it\nbeing queued in `write_item_queue_`. This queue won't get cleared up\nuntil the end of the handshake.\n\nTechnically, it gets cleared on `~TLSWrap` invocation, however this\nwon't ever happen because every `WriteWrap` holds a reference to the\n`TLSWrap` through JS object, meaning that they are doomed to be alive\nfor eternity.\n\nTo breach this dreadful contract a knight shall embark from the\n`close` function to kill the dragon of memory leak with his magic\nspear of `destroySSL`.\n\n`destroySSL` cleans up `write_item_queue_` and frees `SSL` structure,\nboth are good for memory usage.\n\nPR-URL: https://github.com/nodejs/node/pull/9586\nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "6b91062d8d9203e9aec6633c468c149a3d0295d4", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6b91062d8d9203e9aec6633c468c149a3d0295d4" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "html_url": "https://github.com/nodejs/node/commit/ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/ee65b4872de2357a239c7ccfa64aad54b8b3c796/comments", + "author": { + "login": "indutny", + "id": 238531, + "node_id": "MDQ6VXNlcjIzODUzMQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/238531?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indutny", + "html_url": "https://github.com/indutny", + "followers_url": "https://api.github.com/users/indutny/followers", + "following_url": "https://api.github.com/users/indutny/following{/other_user}", + "gists_url": "https://api.github.com/users/indutny/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indutny/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indutny/subscriptions", + "organizations_url": "https://api.github.com/users/indutny/orgs", + "repos_url": "https://api.github.com/users/indutny/repos", + "events_url": "https://api.github.com/users/indutny/events{/privacy}", + "received_events_url": "https://api.github.com/users/indutny/received_events", + "type": "User", + "site_admin": false + }, + "committer": null, + "parents": [ + { + "sha": "f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "url": "https://api.github.com/repos/nodejs/node/commits/f0d40e8be37af3a008e2223faefbeb5899ba95d9", + "html_url": "https://github.com/nodejs/node/commit/f0d40e8be37af3a008e2223faefbeb5899ba95d9" + } + ] + }, + { + "sha": "3efb43c8bab0c0a64af916265d14febba207ca49", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6M2VmYjQzYzhiYWIwYzBhNjRhZjkxNjI2NWQxNGZlYmJhMjA3Y2E0OQ==", + "commit": { + "author": { + "name": "Wayne Andrews", + "email": "andreww@uk.ibm.com", + "date": "2016-10-14T12:33:25Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:13Z" + }, + "message": "build: Add option to compile for coverage reports\n\nAdd --coverage option to configure to support\ncompiling for generation of C based coverage reports\n\nPR-URL: https://github.com/nodejs/node/pull/9463\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "b00a3652dcdbf8bca349e7f266ca0679be78c85f", + "url": "https://api.github.com/repos/nodejs/node/git/trees/b00a3652dcdbf8bca349e7f266ca0679be78c85f" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/3efb43c8bab0c0a64af916265d14febba207ca49", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9hdAAoJENi59a6uhOTPmbEP/01WHeKO8WZ3EtZ5UKOfaguX\no3W1nrVr73gkT8N/uKVazLQ/k701uX4Rui5nFy9tg+mNA7IYal5xtxvuDpBe3yMO\np07JFjuNx2uWjGYnuRdBVLp9kBxmALOo3VETZiQgt8xYr0L+k3G3lwadW7PBRZ0h\nfLxTF/CvNzSGvHi15fC7XoEUwUQU75Tehraq7FkeGaEQEiBOkKnXRRQa9N7PMubd\ne9qSdKdGlRfChFp6Bn0v65B2mXRnd01ByEiYKlY6wXX8bhIR4fjOHXzoGs47a0oB\nNb3G1lmOOs+5V82Ix/hxA1G9rFEW21W4KRlBx3B15RoVrWDFWT1KgUBX/N9QfN55\n46FRd0NmrSwnM5Ei4Cmho1Y3SftcGi+pZdMXFnz/wkqxe8GAGhjQ+J67FUkZWRck\nu65ojPe8Tz9I56XO2nZ8E1s64x7HpLsW8qw7AzkBtIoqpCA0Q9z63qDL0gj0R7Sl\nwUkUVQm6VRj76H99Pd2/mxLRvFDO4pZgCcvVOHR6E2uvqIYteJc1+0s3kJh/3mhf\nilsLAEhcvUhpjq9XOnJcF5ydK6H9It7AwIpPGYCXAsvy3MmmqxviQJi9a+V6yq5M\n0mYOr2lVL0LfyhXUfmP0Dbck9FT1MHwcdpVnUlI4cyhnn26hgm5AWqCAM9R+kH3k\nnRDmuyKiHHURP8Fzr9ij\n=v5D3\n-----END PGP SIGNATURE-----", + "payload": "tree b00a3652dcdbf8bca349e7f266ca0679be78c85f\nparent ee65b4872de2357a239c7ccfa64aad54b8b3c796\nauthor Wayne Andrews 1476448405 +0100\ncommitter Anna Henningsen 1479792733 +0100\n\nbuild: Add option to compile for coverage reports\n\nAdd --coverage option to configure to support\ncompiling for generation of C based coverage reports\n\nPR-URL: https://github.com/nodejs/node/pull/9463\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/3efb43c8bab0c0a64af916265d14febba207ca49", + "html_url": "https://github.com/nodejs/node/commit/3efb43c8bab0c0a64af916265d14febba207ca49", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/3efb43c8bab0c0a64af916265d14febba207ca49/comments", + "author": { + "login": "CurryKitten", + "id": 12443664, + "node_id": "MDQ6VXNlcjEyNDQzNjY0", + "avatar_url": "https://avatars.githubusercontent.com/u/12443664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/CurryKitten", + "html_url": "https://github.com/CurryKitten", + "followers_url": "https://api.github.com/users/CurryKitten/followers", + "following_url": "https://api.github.com/users/CurryKitten/following{/other_user}", + "gists_url": "https://api.github.com/users/CurryKitten/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CurryKitten/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CurryKitten/subscriptions", + "organizations_url": "https://api.github.com/users/CurryKitten/orgs", + "repos_url": "https://api.github.com/users/CurryKitten/repos", + "events_url": "https://api.github.com/users/CurryKitten/events{/privacy}", + "received_events_url": "https://api.github.com/users/CurryKitten/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "url": "https://api.github.com/repos/nodejs/node/commits/ee65b4872de2357a239c7ccfa64aad54b8b3c796", + "html_url": "https://github.com/nodejs/node/commit/ee65b4872de2357a239c7ccfa64aad54b8b3c796" + } + ] + }, + { + "sha": "9491352b8645d8e667592d75283bcf5257f341ea", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OTQ5MTM1MmI4NjQ1ZDhlNjY3NTkyZDc1MjgzYmNmNTI1N2YzNDFlYQ==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-05T06:04:36Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:13Z" + }, + "message": "test: remove watchdog in test-debug-signal-cluster\n\ntest-debug-signal-cluster contains a watchdog timer that results in\nfalse positives in CI. Remove the watchdog timer and let the test runner\ndetermine that the test has timed out.\n\nPR-URL: https://github.com/nodejs/node/pull/9476\nReviewed-By: Michaël Zasso \nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell ", + "tree": { + "sha": "858c4139aec20ef74c1fe67054755ecde7ecd8aa", + "url": "https://api.github.com/repos/nodejs/node/git/trees/858c4139aec20ef74c1fe67054755ecde7ecd8aa" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/9491352b8645d8e667592d75283bcf5257f341ea", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9hdAAoJENi59a6uhOTPuHsP/2H9WyBMGvKhI7VteoI0HkwR\njRiFkMedorQ8pTZZ+DVRnVuswTloR0G9KSg0DlSRO8hQXB9gu8ZT8viB4iylPMV3\nWH6zIZ/SRkDjFCE4OaOkyeIYec23k8n9OwPuw851OfOVoZDU8kSyjzmNrqz1nk/m\nakb0XIA2C4dvZbjXPPxNvYhtQmy/lcDDI98MlEgJQ+dgL82VY+uMXbx6tY5kHu5/\nXgum+b03UEgcAmkb7w8OFx3KxkgauUrMt5KOiO92eKGfxb0g1zRT5M/taJrOLN5y\neSAsN/A14DWgBMjElQiymLes+/21RetKmxxwddxwJprvmCrY7rGK7UjrZMxYCgpl\nV7uNi/8MtTEVJGja2jGYKD4BvXBDHSznqQUrqB6ARc3scyHpf2VasLCXbNuGRV9D\nIqUTKVAqj5TpntfMfaASsAjT5gVYF/mEmz1Mmnzedj7i8AYYilny5vm+ytuwSzlf\nkujZ4Oc1ABRnV8oLNR7zLtPkdjvhiw76ytVHARu5UrzpcJK3G/3XNPeVhhqVP5vh\nJNRNE8ZwwXAolxWRiLOM9eencom2r+TpqoXFcuZJWJyspG2MvFK9KdICE3XOP6Jh\nhdLGE82HWV9r1qNXT+USj9ek1exhct3/HS586GbreFVvMJNd260viBF8FMYGPB00\n7QBXd0wVxuhFvCwqQes8\n=NPZ3\n-----END PGP SIGNATURE-----", + "payload": "tree 858c4139aec20ef74c1fe67054755ecde7ecd8aa\nparent 3efb43c8bab0c0a64af916265d14febba207ca49\nauthor Rich Trott 1478325876 -0700\ncommitter Anna Henningsen 1479792733 +0100\n\ntest: remove watchdog in test-debug-signal-cluster\n\ntest-debug-signal-cluster contains a watchdog timer that results in\nfalse positives in CI. Remove the watchdog timer and let the test runner\ndetermine that the test has timed out.\n\nPR-URL: https://github.com/nodejs/node/pull/9476\nReviewed-By: Michaël Zasso \nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/9491352b8645d8e667592d75283bcf5257f341ea", + "html_url": "https://github.com/nodejs/node/commit/9491352b8645d8e667592d75283bcf5257f341ea", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/9491352b8645d8e667592d75283bcf5257f341ea/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3efb43c8bab0c0a64af916265d14febba207ca49", + "url": "https://api.github.com/repos/nodejs/node/commits/3efb43c8bab0c0a64af916265d14febba207ca49", + "html_url": "https://github.com/nodejs/node/commit/3efb43c8bab0c0a64af916265d14febba207ca49" + } + ] + }, + { + "sha": "841a2c41d43f61361dff3fcf028f08cc134d122d", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODQxYTJjNDFkNDNmNjEzNjFkZmYzZmNmMDI4ZjA4Y2MxMzRkMTIyZA==", + "commit": { + "author": { + "name": "solebox", + "email": "5013box@gmail.com", + "date": "2016-10-31T23:11:18Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:14Z" + }, + "message": "zlib: name every function Ref: #8913\n\nPR-URL: https://github.com/nodejs/node/pull/9389\nReviewed-By: Roman Reiss \nReviewed-By: James M Snell \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "03f855375f49fe576f3e927706f013d000d75694", + "url": "https://api.github.com/repos/nodejs/node/git/trees/03f855375f49fe576f3e927706f013d000d75694" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/841a2c41d43f61361dff3fcf028f08cc134d122d", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9heAAoJENi59a6uhOTPALgQALuCbks2qsz3wkxla7T7YLiX\nT6R4LxXWLJefIx89NNAImKXb7HG3Fa8mmDb8Y/yjndIjowM42Ddg6X2oiGVo9j0w\nRHX9WawawCBgkF2SmAO5K1ZtDyMblo6XeofOYsluSU0w3mChfxQPmLGa7YU7rou8\n+7LZYz2w/Aeo7qbRmebZ4mHob6OTStNWmQvsu7JUrYTmN7hZuCxgGVcSMXCMMpF2\n/5RH0xIR+cTzcu3skB49jVIPwXr3pGS0IgWyXabsr58ZIru7m+fSxP47XR58zdKu\ng+8aWq29IlvVgfn/M6BbxqnwP02oGHJ5uX/nJ6NyqGAkeEaKX7XGNUonk6W12DDs\nCMcDUYAUXQExA4KHo7z/PLEfVXKx1bsmXU8cGp3YgxHN6NowHJ+XsUhlAZkm6dUP\nbr/i98ZhpU3p0eOZrBPjd/YeYGZnR7Ue7lPsmudTpX+lsdT/ktsSD1/Q8Mwych52\n/tql9J4gxKd40Rhh9XVKJ41s8fLeAcSG264OwmF38r4yQZgg2ECKDsLPk6MLxeX6\np3Zd8/4nOdEdsYJpYoR77eLqc06sXkv9fSDvJqTHyk3NsqDc24AgYT7qFrVLc1g3\nSXeHL+xGG4vm0MNCX6Q2gALZVUZiEmnNbdjJ8uxhzBQjVwkNaZA3AkzSwGVufa1G\n3z5Gg9RMAEQLUY97LCMJ\n=HtRB\n-----END PGP SIGNATURE-----", + "payload": "tree 03f855375f49fe576f3e927706f013d000d75694\nparent 9491352b8645d8e667592d75283bcf5257f341ea\nauthor solebox <5013box@gmail.com> 1477955478 +0200\ncommitter Anna Henningsen 1479792734 +0100\n\nzlib: name every function Ref: #8913\n\nPR-URL: https://github.com/nodejs/node/pull/9389\nReviewed-By: Roman Reiss \nReviewed-By: James M Snell \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/841a2c41d43f61361dff3fcf028f08cc134d122d", + "html_url": "https://github.com/nodejs/node/commit/841a2c41d43f61361dff3fcf028f08cc134d122d", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/841a2c41d43f61361dff3fcf028f08cc134d122d/comments", + "author": { + "login": "solebox", + "id": 103052, + "node_id": "MDQ6VXNlcjEwMzA1Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/103052?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solebox", + "html_url": "https://github.com/solebox", + "followers_url": "https://api.github.com/users/solebox/followers", + "following_url": "https://api.github.com/users/solebox/following{/other_user}", + "gists_url": "https://api.github.com/users/solebox/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solebox/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solebox/subscriptions", + "organizations_url": "https://api.github.com/users/solebox/orgs", + "repos_url": "https://api.github.com/users/solebox/repos", + "events_url": "https://api.github.com/users/solebox/events{/privacy}", + "received_events_url": "https://api.github.com/users/solebox/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "9491352b8645d8e667592d75283bcf5257f341ea", + "url": "https://api.github.com/repos/nodejs/node/commits/9491352b8645d8e667592d75283bcf5257f341ea", + "html_url": "https://github.com/nodejs/node/commit/9491352b8645d8e667592d75283bcf5257f341ea" + } + ] + }, + { + "sha": "adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YWRjYzViMTVmNzdmZjk2MmI2MDdjMmIxMGUyMjNmZTFmNmQ3NjdiYQ==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-09T00:32:07Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:14Z" + }, + "message": "zlib: fix linting recently-introduced lint error\n\nRemove unnecessary named function. V8 will do a better job inferring the\nname from the assignment to a property. The current formulation does not\npass linting.\n\nPR-URL: https://github.com/nodejs/node/pull/9524\nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "ed096837f872575726cec31b433e1f149c64f1da", + "url": "https://api.github.com/repos/nodejs/node/git/trees/ed096837f872575726cec31b433e1f149c64f1da" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9heAAoJENi59a6uhOTPXq4P/iScnZGxQ3UovKiI6xC3SIRj\nALmeqnWkCsDjskYM/rgRyLJ56ef5LKjOi8EYrl+8qgFM85vz4eOs0u4z64LW8/rY\nYKhmPCs4OcNnjdRSjM9wJZTQZVeECQFMj4JbyMjQwxPKPMEVHJyJGCEZxgNRwRCE\n37ssvYNxZ/eDyhazyVwiKKZ9V1tmaf/8kCYAXwMB4b2UeaW4dS2A1rFV/lnTyXbZ\npgNRrTm/KBKsyN0y8iE9g5ZLhzxo5pT+YBgBuGZu6dAZgfNZVFxDsi0AxhHonrJ7\nZB7/ff++m7DC4QA9Iz9D9E4ORjeYY+f3i+kYloL5sqOXP8Jx//j8mbZlfZo9J6pH\nqfMJBTP5KqeV+YF/m64ODJ5WtgzgND8KBSxjk3zcuqYg+DMGGpmenv9jTS+ocowP\nTcc01bSWFFrYZ6SGdASVib6F1Bt8Ti85yKpW26aI+6r1pthSsCHYG7nYzWEQzbrt\nu50J5PZisafITAI5wjADgWrap/DMEGLpLLZUl5PGeIa12Fi2Wu2tEyO0OxeDAbCq\nHwh7In3EEg0YRQxnE3LpdR+JCSKaFI8Y+bPCbtT1Z4hu7VEByI78E262t/Wd2Wtf\np6O1nS+n52cdavY2W1iYy72sjQ3MKxiclFLRjyzaOc9+CHEgq/RH3Gm9QBmLWbke\nRIOI0aLPNeKPryUSyt/O\n=k3Ot\n-----END PGP SIGNATURE-----", + "payload": "tree ed096837f872575726cec31b433e1f149c64f1da\nparent 841a2c41d43f61361dff3fcf028f08cc134d122d\nauthor Rich Trott 1478651527 -0800\ncommitter Anna Henningsen 1479792734 +0100\n\nzlib: fix linting recently-introduced lint error\n\nRemove unnecessary named function. V8 will do a better job inferring the\nname from the assignment to a property. The current formulation does not\npass linting.\n\nPR-URL: https://github.com/nodejs/node/pull/9524\nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "html_url": "https://github.com/nodejs/node/commit/adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/adcc5b15f77ff962b607c2b10e223fe1f6d767ba/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "841a2c41d43f61361dff3fcf028f08cc134d122d", + "url": "https://api.github.com/repos/nodejs/node/commits/841a2c41d43f61361dff3fcf028f08cc134d122d", + "html_url": "https://github.com/nodejs/node/commit/841a2c41d43f61361dff3fcf028f08cc134d122d" + } + ] + }, + { + "sha": "6f513e0b46bde53c885b404cce088548daad39d9", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NmY1MTNlMGI0NmJkZTUzYzg4NWI0MDRjY2UwODg1NDhkYWFkMzlkOQ==", + "commit": { + "author": { + "name": "Oscar Morrison", + "email": "me@oscarmorrison.com", + "date": "2016-07-27T12:39:18Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:15Z" + }, + "message": "doc: add npm link to README\n\nPR-URL: https://github.com/nodejs/node/pull/7894\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "98789947ba00275ccd471f046728355ce28f587d", + "url": "https://api.github.com/repos/nodejs/node/git/trees/98789947ba00275ccd471f046728355ce28f587d" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/6f513e0b46bde53c885b404cce088548daad39d9", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9hfAAoJENi59a6uhOTPFXAP/3+YGFegIESGKSeJC+ZcvXtL\nLcpzGydaeblI+3vbyHYWcAQ+3w7JEqtFzhEXdVI0QCnmB5tyyThgvrz5rcPRjche\nzYXqckCNuDoQEixRgh7H1/3CCmjdqw2OqSezByUhrm//SP+QtwoR8b7/CVjvSPLv\njx+krUFmFu0O0MMg7WcYjqsd7HSQOUcm8Bst9hnVKKXVkfna51Vy+pLoEAVsuGE1\nRxttoToPghB1nOQpm/+14xbG5R4k0m4II7j10a4AnZqFLfODUzAudR5dCCoL9ELm\nsQy30+03RSbwpE7UVvv4YZyZpqNHZ3ljVvGdN1s/XHcGG3ap8vI1IyAWMkkDKgjj\n1HN1EMBn5kw9OkoV1Bm302ZGqy50bimcVy/iJdkz9T932rpThKZB4pkEXgkcJz8A\nxL6jbdiqhrUbBQGWiv6bXdGf1Fp8GeHEmM3H4CNQGbPYte+j1KNt/iN/e60/ZX5t\n5FcNDONjaMNfGl1yYUkv/NKZEzDjYqyncSxQk8IHbcOCRroh/HgASZr5wu+CvVsn\ncZacNVdMPxw06WSTv1eRzqHZeuXUSWqbEcyaLz4ae8KVO8kdJUdeALt1qCWEFxVZ\nG11CC1k54o2tCmK8BvuzM1r16ZhjPDmOQw/xmzl/vTzxkJsL6CGTyEZ5bjkABPYU\negaeb4aiwM9diaHSspIk\n=Z0Ar\n-----END PGP SIGNATURE-----", + "payload": "tree 98789947ba00275ccd471f046728355ce28f587d\nparent adcc5b15f77ff962b607c2b10e223fe1f6d767ba\nauthor Oscar Morrison 1469623158 -0400\ncommitter Anna Henningsen 1479792735 +0100\n\ndoc: add npm link to README\n\nPR-URL: https://github.com/nodejs/node/pull/7894\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/6f513e0b46bde53c885b404cce088548daad39d9", + "html_url": "https://github.com/nodejs/node/commit/6f513e0b46bde53c885b404cce088548daad39d9", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/6f513e0b46bde53c885b404cce088548daad39d9/comments", + "author": { + "login": "oscarmorrison", + "id": 1651212, + "node_id": "MDQ6VXNlcjE2NTEyMTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1651212?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/oscarmorrison", + "html_url": "https://github.com/oscarmorrison", + "followers_url": "https://api.github.com/users/oscarmorrison/followers", + "following_url": "https://api.github.com/users/oscarmorrison/following{/other_user}", + "gists_url": "https://api.github.com/users/oscarmorrison/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oscarmorrison/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oscarmorrison/subscriptions", + "organizations_url": "https://api.github.com/users/oscarmorrison/orgs", + "repos_url": "https://api.github.com/users/oscarmorrison/repos", + "events_url": "https://api.github.com/users/oscarmorrison/events{/privacy}", + "received_events_url": "https://api.github.com/users/oscarmorrison/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "url": "https://api.github.com/repos/nodejs/node/commits/adcc5b15f77ff962b607c2b10e223fe1f6d767ba", + "html_url": "https://github.com/nodejs/node/commit/adcc5b15f77ff962b607c2b10e223fe1f6d767ba" + } + ] + }, + { + "sha": "f5442ece33d5b5291c80afcc1125e22eddedd8da", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZjU0NDJlY2UzM2Q1YjUyOTFjODBhZmNjMTEyNWUyMmVkZGVkZDhkYQ==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-06T02:08:31Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:15Z" + }, + "message": "lib,test: remove unneeded escaping of /\n\nThe `/` character does not need to be escaped when occurring inside a\ncharacter class in a regular expression. Remove such instances of\nescaping in the code base.\n\nPR-URL: https://github.com/nodejs/node/pull/9485\nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig \nReviewed-By: Teddy Katz \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "a24356f5ef7b6270eacbc881b81b5fcdb4643f3f", + "url": "https://api.github.com/repos/nodejs/node/git/trees/a24356f5ef7b6270eacbc881b81b5fcdb4643f3f" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/f5442ece33d5b5291c80afcc1125e22eddedd8da", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9hgAAoJENi59a6uhOTPmBMP/jphWvoYkIx2GNpeNWQ9U1BK\nOFVaUwmETAEXjBfMEelCyQRc2FtstB3cjFMp8lWEIf8hNlxknhZCy3ZFgX6N6lGU\ncGjDrciRtUeYCOAxLbsSKiaq4pupPUezyN/qAzH1UV3f+OVeGzmZkQ/auT5kxlPy\nL5itPNGWjKDpKlicVoqKzOLDWdHk2lBVHNX3z3rJ71tVq+dmYl/tLmxEkTB6Fnk3\n0YlykkN6Kdn3v7WmbDgGSv5gqmDYcqXfSsx2Rk0+gwIJXSJGc4o1mGKCX5bCO90r\njw0ImtJDruSL9gV5mL8RBIZVCGeaGbz0peDg1rYmFeGp4Ta6nvKwTyHa+XEBc9Mp\nJysOz1BC7mpI1t0kETq/4AP3rSMlmLaPzzBZ8BvQVAi10JyT+PujiXOnYS537jAe\ndFjV9AOSri8QFm4LkGXbNimklRWQQPVw3kTS/xRC6Zv4IvR7R7wKgx5QoY74max7\nSYThXIDgGrv9+xVQ1zBtEFoZJT/SNTse2aNsPoU5NR1ItTvSOMdY09W/HLWPkW0S\nOZbOM9iI7T+drfcJfpY1SGIBpTYCSsplAxmnKTl4SQ5l5FToCKUApG2UCmc+IdMz\n2K+APhqCzaWotZztUW4WPgpFnKFmedsJRGWK4rqTd73Fw1xMPaaZlHOnAIfTatue\nOmPfznEEycNcltDyKMWG\n=lubY\n-----END PGP SIGNATURE-----", + "payload": "tree a24356f5ef7b6270eacbc881b81b5fcdb4643f3f\nparent 6f513e0b46bde53c885b404cce088548daad39d9\nauthor Rich Trott 1478398111 -0700\ncommitter Anna Henningsen 1479792735 +0100\n\nlib,test: remove unneeded escaping of /\n\nThe `/` character does not need to be escaped when occurring inside a\ncharacter class in a regular expression. Remove such instances of\nescaping in the code base.\n\nPR-URL: https://github.com/nodejs/node/pull/9485\nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig \nReviewed-By: Teddy Katz \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/f5442ece33d5b5291c80afcc1125e22eddedd8da", + "html_url": "https://github.com/nodejs/node/commit/f5442ece33d5b5291c80afcc1125e22eddedd8da", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/f5442ece33d5b5291c80afcc1125e22eddedd8da/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6f513e0b46bde53c885b404cce088548daad39d9", + "url": "https://api.github.com/repos/nodejs/node/commits/6f513e0b46bde53c885b404cce088548daad39d9", + "html_url": "https://github.com/nodejs/node/commit/6f513e0b46bde53c885b404cce088548daad39d9" + } + ] + }, + { + "sha": "ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZWU3NjA2OTQwYWNmZDMyMmU2NGE0ZDA3ZGIzZThkNWIwMDU3NGRjZg==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-06T02:20:17Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:16Z" + }, + "message": "test: fix helper-debugger-repl.js\n\nThe test `debugger/test-debugger-repl-break-in-module` (and probably\nothers) was failing because the handshake message for debugging is no\nlonger `listening on port ` but is instead `listening on\n
:`.\n\nThis change makes the check less strict so as to hopefully future-proof\nit at least a little bit against subsequent changes.\n\nThis test failure is not caught in CI because currently debugger tests\nare not run in CI.\n\nPR-URL: https://github.com/nodejs/node/pull/9486\nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Minwoo Jung \nReviewed-By: Prince John Wesley ", + "tree": { + "sha": "22c2bba8dbc71c57721020a1d16bc5bc3288224b", + "url": "https://api.github.com/repos/nodejs/node/git/trees/22c2bba8dbc71c57721020a1d16bc5bc3288224b" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9hgAAoJENi59a6uhOTPWY4P/3TUe1IC0xqeCEQgD8FAL6rA\nJ7uACzszOIbyyAFyGjzN1kfRa30ydK02CrfNef/Do6oWmyBUeFs0FBDiOhXL8GEV\nz4pP8cWA1DR4quZPSGmCds45xIBO+1xJzNLVxxsTKq3UkLiHYGPelKlREhjL1jIJ\nWJah7KIjiMW7oo6N8Y8lYsS2Uagc/+Sa69WIE68WbMsN5fWVQ2IhDaEAiVoohgTq\nRvh7mbxWaxeH447o8Y3H7UDJSfk6nae9WpAERF6UoYHB9KYSc3bzByTe7Mjv3zQ9\nU0nScrS0CgWxf0J13gHlGhYeGeNt3wioJ/ezAwgaxNsrMvLfiaVrBiHDWwUUplS0\no9nt/MR3zi0cQJ1wgRIdigURQ0cePBAvpEsYuZlZnyu4AiJawBG7J0MQF6a2fpsl\nTXwxDUNaSfM83+hjqVJflsBK8GDKihzSWigobvkOuKMZ34ZzNW6vcELBCKm/+7k+\nlNvOGqwF0MieNF9gozm020S6BIFs5wRDuAQy81vYUygXKfzRHX3dO2LJnCJsgziK\niwnyFMLptzCWlLUgpFgnDLHUxEyGEntXChd7lQP5wSz9v1uGsBTYtfoWGlvsfKnD\ne3Ypvsqd1jMIDszvJMH7o1DI/xfa12znH/+Dpt+6eELyl5PV6TS2rV/XSabY1p87\njSgX9fAT/0coNVEZ7xX+\n=Uvui\n-----END PGP SIGNATURE-----", + "payload": "tree 22c2bba8dbc71c57721020a1d16bc5bc3288224b\nparent f5442ece33d5b5291c80afcc1125e22eddedd8da\nauthor Rich Trott 1478398817 -0700\ncommitter Anna Henningsen 1479792736 +0100\n\ntest: fix helper-debugger-repl.js\n\nThe test `debugger/test-debugger-repl-break-in-module` (and probably\nothers) was failing because the handshake message for debugging is no\nlonger `listening on port ` but is instead `listening on\n
:`.\n\nThis change makes the check less strict so as to hopefully future-proof\nit at least a little bit against subsequent changes.\n\nThis test failure is not caught in CI because currently debugger tests\nare not run in CI.\n\nPR-URL: https://github.com/nodejs/node/pull/9486\nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Minwoo Jung \nReviewed-By: Prince John Wesley \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "html_url": "https://github.com/nodejs/node/commit/ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/ee7606940acfd322e64a4d07db3e8d5b00574dcf/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "f5442ece33d5b5291c80afcc1125e22eddedd8da", + "url": "https://api.github.com/repos/nodejs/node/commits/f5442ece33d5b5291c80afcc1125e22eddedd8da", + "html_url": "https://github.com/nodejs/node/commit/f5442ece33d5b5291c80afcc1125e22eddedd8da" + } + ] + }, + { + "sha": "2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MmE5NjI1NjU2ZDRmOGU5MjY4ODkwZTI0YTg0NTRiZTdjMGEyYmFjMg==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-06T03:45:16Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:52Z" + }, + "message": "test: move timer-dependent test to sequential\n\n`test-regress-GH-897` is dependent on a timer firing within a period of\ntime. Especially on some of the FreeBSD hosts on CI, we have seen tests\nlike that fail when run in parallel. (This may have nothing to do with\nFreeBSD and may just mean that the hosts are resource-constrained.) Move\nthis test to sequential as we have done with several other\ntimer-dependent tests recently.\n\nThe test has also been refactored and documented via comments.\n\nPR-URL: https://github.com/nodejs/node/pull/9487\nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: Minwoo Jung ", + "tree": { + "sha": "5ac21434aa8433255d82627b84139453318cdc87", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5ac21434aa8433255d82627b84139453318cdc87" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iEAAoJENi59a6uhOTPekYP/i5T7eeFS689M5WeWlOE1DMq\nmwuepoGx2ZRD5+4yzA/daCDWENpk3sJCR1n1PSJV3T+K077YwBcvryr/Yqmm2DNj\nkCUUr1bSB0QBNFXgWTLjtPAqoAvG0qiHfKrVoitxDRFevo0swSwHDCD0yVC3kpnO\n9TfF7KQ/HEh/BjsHH9QimATJ5c/OtFav2xguaoC7urxzjwwsT7NUSSQr+Tv56FWT\nSFYF+pfsXmXT5mWDEdUfBAzExgSiNt7XWcV9VZF4szSRWltviv1RFg6L3n5inZV4\nKG3V6Q7qP2Hu7XAG56BPJA8IipXYrWcoScF/lyuBmdYFAOkSsw6qWdNVFoEX7rle\nXCNTg9xhbyL2KzvxJceHJQnF73nBXRQN5fFV7a0Ng80Y7HiQqyp08mgdhVRtwsgY\n+QioTS27oBNa2RgpYb9NDouSNL/es5cri2hpcL+EFX39DisXwGiWy/pigHgn8qg+\n6CDA2TeRbF88+cuU0rLniukF1SVKSzGIuNxHEk48onpeFW+R47y7S0S3C6Ls1X85\njZxvG49wM6nGbt7bjkN3gIiObGsSryO/PbwC/UAW2m4pm8u6hkv8bfD1YcYCV0gx\nfy2MTAdOOVF0lZDP6p7Vfua/QZ9QYMNhtxT9Fjn/qpk+8lbBLWf60tQR3nQSdN16\nWOf/IIEP8xwyc3wpYqKz\n=goB6\n-----END PGP SIGNATURE-----", + "payload": "tree 5ac21434aa8433255d82627b84139453318cdc87\nparent ee7606940acfd322e64a4d07db3e8d5b00574dcf\nauthor Rich Trott 1478403916 -0700\ncommitter Anna Henningsen 1479792772 +0100\n\ntest: move timer-dependent test to sequential\n\n`test-regress-GH-897` is dependent on a timer firing within a period of\ntime. Especially on some of the FreeBSD hosts on CI, we have seen tests\nlike that fail when run in parallel. (This may have nothing to do with\nFreeBSD and may just mean that the hosts are resource-constrained.) Move\nthis test to sequential as we have done with several other\ntimer-dependent tests recently.\n\nThe test has also been refactored and documented via comments.\n\nPR-URL: https://github.com/nodejs/node/pull/9487\nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: Minwoo Jung \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "html_url": "https://github.com/nodejs/node/commit/2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/2a9625656d4f8e9268890e24a8454be7c0a2bac2/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "url": "https://api.github.com/repos/nodejs/node/commits/ee7606940acfd322e64a4d07db3e8d5b00574dcf", + "html_url": "https://github.com/nodejs/node/commit/ee7606940acfd322e64a4d07db3e8d5b00574dcf" + } + ] + }, + { + "sha": "819a38df96b73102beef7b7497886f34ec11dbdf", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODE5YTM4ZGY5NmI3MzEwMmJlZWY3Yjc0OTc4ODZmMzRlYzExZGJkZg==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-07T00:47:41Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:52Z" + }, + "message": "benchmark: split timers benchmark and refactor\n\nThe depth benchmark for timers sets a timer that sets a timer that sets\na timer that... 500K of them.\n\nSince each timer has to wait for the next tick of the event loop this\nbenchmark takes a very long time to run compared to the breadth\ntest that is already in the file. This may be more of an event loop\nbenchmark than a timer benchmark.\n\nReduce the number of iterations for the depth test as it's really just\nrunning the iterations in sequence, not in parallel. And even on an\ninfinitely fast machine, it would take over 8 minutes to run because\neach tick of the event loop would have to wait 1ms before firing the\ntimer.\n\nSplit the depth and breadth benchmarks so that their `N` values can be\nset independently.\n\nDo some minor refactoring to the benchmarks (but no ES6 additions so\nthat the benchmarks can still be run with old versions of Node.js).\n\nRefs: https://github.com/nodejs/node/issues/9493\nPR-URL: https://github.com/nodejs/node/pull/9497\nReviewed-By: Andreas Madsen \nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel ", + "tree": { + "sha": "3773c9bf1759a1a2f64d6b0827ed890929a5fb2a", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3773c9bf1759a1a2f64d6b0827ed890929a5fb2a" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/819a38df96b73102beef7b7497886f34ec11dbdf", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iEAAoJENi59a6uhOTPEZkP/iFnt+1t9npZGMQ+E8DJ5e0s\nSEMPmp1EF0gpHoErrWECjY0PjD2iuQ7Y2lquConOZPaKLRpD2qSKOBK48kn42Pe+\ntzlgA+jEueJYDnCb0LKRjwBZIoJ12jZoQ1PHcYDgD5OFjey0bYjByHcCKn617U5Z\nihle1EG+OEawW/JkCgDy5NPbf3DMP6bPeu0bjTNTmZjNLBUBEFOwSFCIzN/e8Ntv\nb9Dl34ELJqnQw43tgsNphFYh7Cjn1Kn+6WMx3gK9MK5beiVPd3IMew6D18jAFtG7\nW64u8OBKBHMWN1n+YI19ubwnDx63sQet3tzqFxfhvNmCgbiZrTuR1+dQiWlpDmoZ\nMSoD4ujYNAY4nahBWlG5zDq3dAGZn5Om99d0pT+ZS7mwsch58ujrVq8NY3mChXHi\nlXX1MaOcSF5JVZPYkXd/aCIMrRrehuaszqueMmGAyAZFsJ4NSwihsUBswzYG7bhh\nEQPApYaKSoff5Su+J85kYBCA4sVpgjcqcq6ISLVN6t+VMG3Rh2+juhVBy8fNKP5K\nCktO1NwJqPDzjc6uIcnHupQ6atvmvOvBa3xV47/AuxLypa4a1J1IroIXXmNpclex\n7bpe/0ztLx2rAX/b4ylSBgefZN54fQdnjN4WXPyHTGlbrMG8xQ3hNZVU/anqGv4z\n5RdGDUkOSuEJzewhzkdm\n=Wmiz\n-----END PGP SIGNATURE-----", + "payload": "tree 3773c9bf1759a1a2f64d6b0827ed890929a5fb2a\nparent 2a9625656d4f8e9268890e24a8454be7c0a2bac2\nauthor Rich Trott 1478479661 -0800\ncommitter Anna Henningsen 1479792772 +0100\n\nbenchmark: split timers benchmark and refactor\n\nThe depth benchmark for timers sets a timer that sets a timer that sets\na timer that... 500K of them.\n\nSince each timer has to wait for the next tick of the event loop this\nbenchmark takes a very long time to run compared to the breadth\ntest that is already in the file. This may be more of an event loop\nbenchmark than a timer benchmark.\n\nReduce the number of iterations for the depth test as it's really just\nrunning the iterations in sequence, not in parallel. And even on an\ninfinitely fast machine, it would take over 8 minutes to run because\neach tick of the event loop would have to wait 1ms before firing the\ntimer.\n\nSplit the depth and breadth benchmarks so that their `N` values can be\nset independently.\n\nDo some minor refactoring to the benchmarks (but no ES6 additions so\nthat the benchmarks can still be run with old versions of Node.js).\n\nRefs: https://github.com/nodejs/node/issues/9493\nPR-URL: https://github.com/nodejs/node/pull/9497\nReviewed-By: Andreas Madsen \nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/819a38df96b73102beef7b7497886f34ec11dbdf", + "html_url": "https://github.com/nodejs/node/commit/819a38df96b73102beef7b7497886f34ec11dbdf", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/819a38df96b73102beef7b7497886f34ec11dbdf/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "url": "https://api.github.com/repos/nodejs/node/commits/2a9625656d4f8e9268890e24a8454be7c0a2bac2", + "html_url": "https://github.com/nodejs/node/commit/2a9625656d4f8e9268890e24a8454be7c0a2bac2" + } + ] + }, + { + "sha": "dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZGFiM2U0NTFhY2JkZDRhOGQwMDAwZmYwNmU2M2JlYzcwMWZkMTNhMg==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-07T04:01:17Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:53Z" + }, + "message": "test: refactor make-callback-recurse test\n\nMove copy/pasted callback into its own function.\n\nPR-URL: https://github.com/nodejs/node/pull/9498\nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel ", + "tree": { + "sha": "04a22d251ed126b6ad8266be29418407cd2df022", + "url": "https://api.github.com/repos/nodejs/node/git/trees/04a22d251ed126b6ad8266be29418407cd2df022" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iFAAoJENi59a6uhOTPCtcP/2HxIOOmvMXFnfLFn/qgwGPJ\nQXHV7kwySNiXqlLeZcUtdhECixeUInnrzy03rfjnCwmhHH8p1/BhkImSofJTP15N\n9zIngxFA1NJiRf3Ek+E6Ks9DdGSU2tPmjbe2wGCnZiBlEZW8fK1+LQJHP9dk5CyP\nhWxCf2x95xE0SajE2fHRJnaZH1NJ6h3Tc6yB3zhFrQNQyzJy2ksB22SKBFtyDxpx\nIXeWKef+v1cayk0iopN4svHZzOGbu7PhzG3uJpf8IWfn61DbSV4OMk9rnx2D7KYg\nwKjnodwtDGWA/prTB+W4ASu4yShrZfBUa/ahkK0oPieJqfWhxvNaBGqmg0z/vznn\nrDN9omv95JNHqQnB2QIXwMJQztbsWiB2GF4Bp5nSboMSX0FIoBVt6v/Vs2Vti28/\nv2IAI4xsAX11pmI8oM6GVyElCreXRQd8CxBOqfkunAU1pdsTUvc5t2eyovwOZNq5\nnahJzBmYbz/fh/0iafFsbCWriQsbfCk3gG83DIU58yHAqd6s1wGqtn0ng9Kuusbd\n2Mo6QyyvxsUI1t6k9LpDJ23OtMKqQB9X9xs13egpthOsL3s3u+YKmza9FRT+VX4+\nWYvrRB2HzzkIPfquc5xH/Wki7mEpmkFvJ+FO36yos8D8GxnWgo2n+2KWWwvff5Jx\nSLUBo1dkZhQina1D6gt6\n=uekW\n-----END PGP SIGNATURE-----", + "payload": "tree 04a22d251ed126b6ad8266be29418407cd2df022\nparent 819a38df96b73102beef7b7497886f34ec11dbdf\nauthor Rich Trott 1478491277 -0800\ncommitter Anna Henningsen 1479792773 +0100\n\ntest: refactor make-callback-recurse test\n\nMove copy/pasted callback into its own function.\n\nPR-URL: https://github.com/nodejs/node/pull/9498\nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "html_url": "https://github.com/nodejs/node/commit/dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/dab3e451acbdd4a8d0000ff06e63bec701fd13a2/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "819a38df96b73102beef7b7497886f34ec11dbdf", + "url": "https://api.github.com/repos/nodejs/node/commits/819a38df96b73102beef7b7497886f34ec11dbdf", + "html_url": "https://github.com/nodejs/node/commit/819a38df96b73102beef7b7497886f34ec11dbdf" + } + ] + }, + { + "sha": "342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzQyZDhlMDVjYjMzZDVjNzI3NGVmZjNmZjYyM2ZiYTJhYzdkNmU2OA==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-07T04:20:03Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:53Z" + }, + "message": "test: refactor inspector-helper.js\n\nThere are two instances of `setTimeout()` called without a duration in\n`inspector-helper.js`. Change to `setImmediate()` for clarity that it\nisn't a mistake.\n\nPR-URL: https://github.com/nodejs/node/pull/9499\nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Eugene Ostroukhov \nReviewed-By: Prince John Wesley \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "7a89100b65a75cd8be9c1c3d0c3b7cb009af07f8", + "url": "https://api.github.com/repos/nodejs/node/git/trees/7a89100b65a75cd8be9c1c3d0c3b7cb009af07f8" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iFAAoJENi59a6uhOTPwLoP/3eaFdH0PANxPkJVsyiTIvvU\nisBesPQyEM3L99pHACiJHrNNpf6yei6sQ8IaZ9A+tMmCCcDmep6v0UypNaV2XDe2\nbsc7bIvAqvQJB2ULJIkqbRSLXK844lurLpgnZh5sRSnf38rgiUI+FQAXyPPsgUlR\nzLMJxjkHhdrjZ3AAsyPayGZ44CTevgKZwLzEPPleKXSvC388epfPx5CZAChMohPV\nfUgVx3rxy2UbGIVCstCttysTARHBGcHySsD8h/ThcrLlDT8qPNZRqsyf5y6fEkrU\nNSnkLyaC6zGy2hwSwqmQsRr6z9iskIX6deUvNJsFAdSgY/hc8xx2rfUk7S+lgKGl\nXQYV98kBpuaSTftb3ZZDUoBzUWRKY5tYhY5TpGrxGf0GO49hODiZq2kx1M33aQn1\n7F6K3TctMICqBEViWCptHfuud7uDr7uh4tB+SVFTiDXwzR7sjrYZSP/5f8uQxzEf\nvXVQatxePcDx61YF6td8P0B6Okybo9rbobJ/cirEzk6hFPUJaTXDIgv6cYQPFtLl\nm3q2MCKab2jV5Kne6/hu/NlvVQI2/G35SumVywq1KzYfQUImt0Fbe1atOjixZidD\n3vQhKgPPxVyGme69jcHwDCoD4hPlHzPsoDzihMKgksStakPer6Gl17N+dkDzFQnz\nJtDBOYcF7XrQO5qPMvCn\n=qX01\n-----END PGP SIGNATURE-----", + "payload": "tree 7a89100b65a75cd8be9c1c3d0c3b7cb009af07f8\nparent dab3e451acbdd4a8d0000ff06e63bec701fd13a2\nauthor Rich Trott 1478492403 -0800\ncommitter Anna Henningsen 1479792773 +0100\n\ntest: refactor inspector-helper.js\n\nThere are two instances of `setTimeout()` called without a duration in\n`inspector-helper.js`. Change to `setImmediate()` for clarity that it\nisn't a mistake.\n\nPR-URL: https://github.com/nodejs/node/pull/9499\nReviewed-By: Colin Ihrig \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Eugene Ostroukhov \nReviewed-By: Prince John Wesley \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "html_url": "https://github.com/nodejs/node/commit/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "url": "https://api.github.com/repos/nodejs/node/commits/dab3e451acbdd4a8d0000ff06e63bec701fd13a2", + "html_url": "https://github.com/nodejs/node/commit/dab3e451acbdd4a8d0000ff06e63bec701fd13a2" + } + ] + }, + { + "sha": "96471556b5cf5de89d838726cef8afc3263f0feb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OTY0NzE1NTZiNWNmNWRlODlkODM4NzI2Y2VmOGFmYzMyNjNmMGZlYg==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-07T21:34:54Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:54Z" + }, + "message": "test: move tick-processor tests to own directory\n\nThe tick-processor tests are inherently non-deterministic. They\ntherefore have false negatives from time to time. They also\nsometimes leave extra processes running.\n\nMove them to their own directory until these issues are sorted. Note\nthat this means that the tests will not be run in CI. Like the inspector\ntests and other tests, they will have to be run manually when they are\nwanted.\n\nPR-URL: https://github.com/nodejs/node/pull/9506\nReviewed-By: Daniel Bevenius \nReviewed-By: Matthew Loring \nReviewed-By: Gibson Fahnestock ", + "tree": { + "sha": "99ce2e4a39afdd9cecd0bd00b257641d9580baca", + "url": "https://api.github.com/repos/nodejs/node/git/trees/99ce2e4a39afdd9cecd0bd00b257641d9580baca" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/96471556b5cf5de89d838726cef8afc3263f0feb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iGAAoJENi59a6uhOTPLL8P/2sjE3AcQS/XUwwvHqH8RFb4\n4cojOuAa0KN3UE1kOoIAWBDd7f6YGbL3un0cwLReeEZAevzR7qMNK3ZpHv8TRoCa\nsCRxzoz2WRd1RM6RWAUMYuKojTXqTjLE29F7bAZSXcifxQtOAPMv9nliKNYFrJ++\n8DS0lQ9JLq79hzLXgynA1qA1m1/WULyOZc4TFcrjx2roBd+e89lcZbcte9xfLk+d\nE4B727OrbueVMYZGNUYUwroZj65deaoW4/ZZhLNKX6FgLGolUrNJ4ulaZJkyuaXI\nANWbgj31STdOIU6t8KyrOBlvHe6tj3ceMhd+Vii5Z6pAwvVcWTkhDyAtVxLaweSA\n0c72fFHJ3rMbQ6ip2d3EZ/W259layR+DwRDz9qMKrxjIg/gdg4RpSVNpjTPmMRL/\nA/j3chFGqUJhG46NxOAfoBk+DZg7vKTb2D+wMqSZCQJHOw7c5LSUrKeavXgUDOCl\n+vzKQZHWatkcj3yDQ/vs/oYirIM88PFG8R/1PW3qCSofxt5MVe/1/AyYR+uJp1pH\n8iM33zm/NF/5kev+bjTILTpgSVvJyqOHFVT7n8JuuaxsXNWQ5AOtWTcWjb9uex1r\nGXoGp22mgfstwHRhs4E851HI5Xrkb7lKEoHPEu3+DBfS63vHbcruzcsqNvB301NM\nRI3ksCVnzVcp2xVXDMWA\n=ih3P\n-----END PGP SIGNATURE-----", + "payload": "tree 99ce2e4a39afdd9cecd0bd00b257641d9580baca\nparent 342d8e05cb33d5c7274eff3ff623fba2ac7d6e68\nauthor Rich Trott 1478554494 -0800\ncommitter Anna Henningsen 1479792774 +0100\n\ntest: move tick-processor tests to own directory\n\nThe tick-processor tests are inherently non-deterministic. They\ntherefore have false negatives from time to time. They also\nsometimes leave extra processes running.\n\nMove them to their own directory until these issues are sorted. Note\nthat this means that the tests will not be run in CI. Like the inspector\ntests and other tests, they will have to be run manually when they are\nwanted.\n\nPR-URL: https://github.com/nodejs/node/pull/9506\nReviewed-By: Daniel Bevenius \nReviewed-By: Matthew Loring \nReviewed-By: Gibson Fahnestock \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/96471556b5cf5de89d838726cef8afc3263f0feb", + "html_url": "https://github.com/nodejs/node/commit/96471556b5cf5de89d838726cef8afc3263f0feb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/96471556b5cf5de89d838726cef8afc3263f0feb/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "url": "https://api.github.com/repos/nodejs/node/commits/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68", + "html_url": "https://github.com/nodejs/node/commit/342d8e05cb33d5c7274eff3ff623fba2ac7d6e68" + } + ] + }, + { + "sha": "c07f6486629e9cbb8a03529f681fa55f7656c830", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YzA3ZjY0ODY2MjllOWNiYjhhMDM1MjlmNjgxZmE1NWY3NjU2YzgzMA==", + "commit": { + "author": { + "name": "Andreas Lind", + "email": "andreas@one.com", + "date": "2016-11-02T22:21:54Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:54Z" + }, + "message": "doc: Fix inaccuracy in https.request docs\n\nPR-URL: https://github.com/nodejs/node/pull/9453\nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \nReviewed-By: Sam Roberts \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "f339b4721d4d7d2806216dde66a0824b2950aa54", + "url": "https://api.github.com/repos/nodejs/node/git/trees/f339b4721d4d7d2806216dde66a0824b2950aa54" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/c07f6486629e9cbb8a03529f681fa55f7656c830", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iGAAoJENi59a6uhOTP3lkQAI1CeRJacX5ZpOENPw/bIq4J\nhdq7Ik3RKFj8VlXs9lpQ38DWN1kqTlN1RfFhofVqkc2JC8xb0TxhEv7Zzv3TlaNZ\nv5l0GSmbnVTOlmdK8iBQ3TP7tm05TQkvJIBPamRVEsebTJL0+ElRWNt/3i3Kr8Zb\nEm9zafpDrzTc3PHSHAx2AEWgnLpzs0BECAsmsduIosoAmSlgEgp9x/Y7lZ2Z9JQz\nC1wgcr9L0BRKNFKT4h0m6xqzUD2Km9LsBv+3QqTRuUb4pcec13RG/wKv/Fjx8aS0\ntD8FQjyXpPzD5Wj7h7ZKJr3oYS/ncWKo1jBFt/aVh2jwRtEiVr/Eoiewz8leUBaN\nbnprr7/mjsHv+D9Drw7beqn3L0bR9cCyOZyPxZFbmDTuSLJgphqhQSc0AjNCXwUd\n0Pfjj/VTpKBMIhkGB8Ek0a77AfCKbCFvFmo4e/AmRlgNTpAx7Wi7sv4D1BEAcHj8\nuLHqZsXnmvoU4QoyVKfS66KdF64bBbKSHKcB8xI66VMlakxBWMcbhkCKg45zCPc1\nidAoWYE8G8tXymXqTl9705QmCsgq6AOl2YzMLET6Cn+DWAulbFCa6c7ISyGPukbv\nqiarvjPU/EC5DfsAlB+LqfsYAThBwYf3WR5OtXDLHjplg9lv1EbjcP9j2BIVKzHA\nwtoOT3nWDoadSreNHT4v\n=L9+R\n-----END PGP SIGNATURE-----", + "payload": "tree f339b4721d4d7d2806216dde66a0824b2950aa54\nparent 96471556b5cf5de89d838726cef8afc3263f0feb\nauthor Andreas Lind 1478125314 +0100\ncommitter Anna Henningsen 1479792774 +0100\n\ndoc: Fix inaccuracy in https.request docs\n\nPR-URL: https://github.com/nodejs/node/pull/9453\nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \nReviewed-By: Sam Roberts \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/c07f6486629e9cbb8a03529f681fa55f7656c830", + "html_url": "https://github.com/nodejs/node/commit/c07f6486629e9cbb8a03529f681fa55f7656c830", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/c07f6486629e9cbb8a03529f681fa55f7656c830/comments", + "author": { + "login": "papandreou", + "id": 373545, + "node_id": "MDQ6VXNlcjM3MzU0NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/373545?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/papandreou", + "html_url": "https://github.com/papandreou", + "followers_url": "https://api.github.com/users/papandreou/followers", + "following_url": "https://api.github.com/users/papandreou/following{/other_user}", + "gists_url": "https://api.github.com/users/papandreou/gists{/gist_id}", + "starred_url": "https://api.github.com/users/papandreou/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/papandreou/subscriptions", + "organizations_url": "https://api.github.com/users/papandreou/orgs", + "repos_url": "https://api.github.com/users/papandreou/repos", + "events_url": "https://api.github.com/users/papandreou/events{/privacy}", + "received_events_url": "https://api.github.com/users/papandreou/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "96471556b5cf5de89d838726cef8afc3263f0feb", + "url": "https://api.github.com/repos/nodejs/node/commits/96471556b5cf5de89d838726cef8afc3263f0feb", + "html_url": "https://github.com/nodejs/node/commit/96471556b5cf5de89d838726cef8afc3263f0feb" + } + ] + }, + { + "sha": "62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NjI0NzhlYjNkOTcyNDNlMmM3ZjcxYjY0YzIzYjRhYzBhMGRmYjAxMg==", + "commit": { + "author": { + "name": "timathon", + "email": "timathon@outlook.com", + "date": "2016-11-09T04:07:49Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:55Z" + }, + "message": "doc: fix link to Event Loop page\n\nPR-URL: https://github.com/nodejs/node/pull/9527\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "be3639c91789fc1aa5453a210bc4aa4d2e5d0380", + "url": "https://api.github.com/repos/nodejs/node/git/trees/be3639c91789fc1aa5453a210bc4aa4d2e5d0380" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iHAAoJENi59a6uhOTPg1IP/1ysRKwBIXWd0MV3UNLOykuM\nyv/6ZO7O4GsQNdla9ksN6Hqrfbab0XTAyu5IjXnHkeYvZyOcKw31e+yamGYJuj96\n/JPZ+16pT+a0OKllcfcL8auiyl/64ep8qxpQnudzHX9K00tCkqJJlXhT7En+WgWw\nQk06F5ntgJm+fcvJRu62P/4p7gw4WzOtz0iURczrxHoBg0C2bEA55hY/I/zDEVma\nZhTGURfDXlo9zwJ3XYWApRKi5G3pg9VGPmfeW5o2SMeA9hAmdPFMvY05baU9ERvH\nGYXr6PQbN6Z1pP6vkhPtlQHurHYTq3q3AoZZNGLsP1DSvnWvXXlcnBByIze476/b\nSeTbgDaHKJX0ktPjA1Hk0B3a2LkZ4q+ZY3B9AWoXS1gouQlfyvh7cuTWjUjmk/Wf\n7tMNrE2wdF3zjHzq38MEAYViHlpBlDdsl9sXtJtpb3g5/KbFLm2yV5XKJAud4ZHw\n4UN4HGk+Kc1nPQYgmTdaJG55jJXrtNamwJPCNCKseb8UEVQi9h1XEjE4KYz6+Md0\nDCLVKs+tD54U/IQXC+1oywna87UIzZdlaXQuwd25DzE6MoaCvkGI+p0p20EhWq9+\n/bgDuxaP4glmE84HJjyPQ7o3qBx/t5nNsCUk+ZSWZnZnm1CuniDzRFeIM0536NN9\n/ZObBC6HOYbDr6YC6i1i\n=NML/\n-----END PGP SIGNATURE-----", + "payload": "tree be3639c91789fc1aa5453a210bc4aa4d2e5d0380\nparent c07f6486629e9cbb8a03529f681fa55f7656c830\nauthor timathon 1478664469 +0800\ncommitter Anna Henningsen 1479792775 +0100\n\ndoc: fix link to Event Loop page\n\nPR-URL: https://github.com/nodejs/node/pull/9527\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "html_url": "https://github.com/nodejs/node/commit/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012/comments", + "author": { + "login": "timathon", + "id": 9364651, + "node_id": "MDQ6VXNlcjkzNjQ2NTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/9364651?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/timathon", + "html_url": "https://github.com/timathon", + "followers_url": "https://api.github.com/users/timathon/followers", + "following_url": "https://api.github.com/users/timathon/following{/other_user}", + "gists_url": "https://api.github.com/users/timathon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/timathon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/timathon/subscriptions", + "organizations_url": "https://api.github.com/users/timathon/orgs", + "repos_url": "https://api.github.com/users/timathon/repos", + "events_url": "https://api.github.com/users/timathon/events{/privacy}", + "received_events_url": "https://api.github.com/users/timathon/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "c07f6486629e9cbb8a03529f681fa55f7656c830", + "url": "https://api.github.com/repos/nodejs/node/commits/c07f6486629e9cbb8a03529f681fa55f7656c830", + "html_url": "https://github.com/nodejs/node/commit/c07f6486629e9cbb8a03529f681fa55f7656c830" + } + ] + }, + { + "sha": "92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OTJmMTYzZTQ2NTViNzM4MzcwYzc4MWVkYzcyYmRkMWI2YmJmZThkZA==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-07T14:27:37Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:55Z" + }, + "message": "doc: clarify the exit code part of writing_tests\n\nPR-URL: https://github.com/nodejs/node/pull/9502\nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Daniel Bevenius \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "96c311acf51b18660696de9e36c57f6e53d8f6ab", + "url": "https://api.github.com/repos/nodejs/node/git/trees/96c311acf51b18660696de9e36c57f6e53d8f6ab" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iHAAoJENi59a6uhOTPocoP+wfofIGwwq6w3o6XzMvgvzdn\nlwnwhkBiml6eNbqwdLrBOOEIXIhWUKteC/jSLIeff0xJFXLaandYRlFIzF4gvLg2\ngk4oRZDMmf02JuW7P/6pH/QMz9dKuDLx/nUbZE6UoL+un3t1zC9pLE/32rXfkSsX\nmiVznF832n3wr9AzweRBZPCMQSdgkVM7FWbJLU+NDrOLgvz5oKnq8scSJlHhmOR0\nIEnG7uygcy+Ti0tb++w60z33xN6ZZotAKY98aSC7LN2bZp2ewUJAx4YPNCe0G2nk\nT9QrKUmG5/Q646hGesdo43sL6f3t0z9Q/C1Z+joLb5JEbwkYs88Ge6acY0DA4hxm\nzeDifwGfQr//MBqtRCziWsMEaMOhdVVKj7ZlxzY1BV2b0F3pWxL1Ou/wJlx1luKS\nzPz3VF2o+7BsvXpSoO/mVOk+U11mXnCmYyD+5YMsaTVIofQnowEZyQkDgRpRs0Ag\nTAhp6Xoz4YVd6qfDhdl6m9y1eiEEr0PDV2Eqn96r+mTNkEjEcmaZyLQMHiSk4ENn\n9fKjPzUCjb7HCIsDG1mIrfV5AJ6Zm3WuO6wDqbEx53eboBvIuL3aeIMJWZaMjlRw\nidFfMHCnyjrtiklY+juw06dn3go4XOX1bZ7z1s2SCg446++q3NaXnUf67DZ6/i7g\nyam7d8Mx9szlI/+AdMT+\n=UX6p\n-----END PGP SIGNATURE-----", + "payload": "tree 96c311acf51b18660696de9e36c57f6e53d8f6ab\nparent 62478eb3d97243e2c7f71b64c23b4ac0a0dfb012\nauthor Jeremiah Senkpiel 1478528857 -0500\ncommitter Anna Henningsen 1479792775 +0100\n\ndoc: clarify the exit code part of writing_tests\n\nPR-URL: https://github.com/nodejs/node/pull/9502\nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Daniel Bevenius \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "html_url": "https://github.com/nodejs/node/commit/92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/92f163e4655b738370c781edc72bdd1b6bbfe8dd/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "url": "https://api.github.com/repos/nodejs/node/commits/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012", + "html_url": "https://github.com/nodejs/node/commit/62478eb3d97243e2c7f71b64c23b4ac0a0dfb012" + } + ] + }, + { + "sha": "a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YTQxMmI5ZmE5YWI4ODJmMjUyNzBlZDk4M2E5YjM1NDIwZjJjOWY3Mw==", + "commit": { + "author": { + "name": "Ryan Lewis", + "email": "ryanharrisonlewis@gmail.com", + "date": "2016-11-06T21:29:59Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:56Z" + }, + "message": "doc: grammar and structure revisions of wg doc\n\nPR-URL: https://github.com/nodejs/node/pull/9495\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "0654a0d16b1fad4274bb2d5a0b5524f90c5ded07", + "url": "https://api.github.com/repos/nodejs/node/git/trees/0654a0d16b1fad4274bb2d5a0b5524f90c5ded07" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iIAAoJENi59a6uhOTPPS0P/3vIgtojr5Bc8e5G7KFnrlgL\nfiLf7gAE+hAIv/C2rXR7uXtNYi8d/0Pbp23qCHIXspyIQ25lMWoPfxdcyzXFIPG3\nIVcJG67jbi1KQAgo9Tj8K7hngouYSuCN/hdiKgwkqxeDtJPPm6LFKZkUlS0zl54O\nosApi62IPEunOL084VYvAmqOlj+I563xy4hFscoe7AN48Y4RWTxQ/aQNMzI3oN+4\nbm/0XYlzheoKNCUZkLqwlwinOYzbDUxieFpj00I8emZOqaYfnNBwea6BM5jLbkvZ\nce1cCry0pZgliG+XHN53cAEniInMqF9uYHfWJ2MPobdj6HyiOQljbissmfMZ0ITS\nF5g5FXu2Ic+AJ9cav+SD/Pq5lhPPo5TW69BqlI8iUl4rjFh75m1xUWKYOG1ofxvi\nmIddii2pMlLpBO2gt6oW0OPkfgHbLXv+DCWLw5mVZYt5T8vnlnD7ubwjsZGj6zq8\nAsyNin3oKIoGCB4o6L8f12NDNTF15sa25+ZfrUpj7Ut4m6GV5/SJLf1FTw7w4uu4\nGC6G3vnU6QvGgeRtGse1GiBEBQXz+HiZ3qulT2SXfHLWfDvJKSciGYyGSk877J6Q\nJJWvRqYGRTzt7HIkMkxI0YXqy5yER5qLNR5N8kl3+D+FZpSYBaCuedqBPiqDW7ml\nGzXNAOwRn1dhhh0t00qY\n=Czqf\n-----END PGP SIGNATURE-----", + "payload": "tree 0654a0d16b1fad4274bb2d5a0b5524f90c5ded07\nparent 92f163e4655b738370c781edc72bdd1b6bbfe8dd\nauthor Ryan Lewis 1478467799 -0800\ncommitter Anna Henningsen 1479792776 +0100\n\ndoc: grammar and structure revisions of wg doc\n\nPR-URL: https://github.com/nodejs/node/pull/9495\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "html_url": "https://github.com/nodejs/node/commit/a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/a412b9fa9ab882f25270ed983a9b35420f2c9f73/comments", + "author": { + "login": "ryanmurakami", + "id": 767105, + "node_id": "MDQ6VXNlcjc2NzEwNQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/767105?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ryanmurakami", + "html_url": "https://github.com/ryanmurakami", + "followers_url": "https://api.github.com/users/ryanmurakami/followers", + "following_url": "https://api.github.com/users/ryanmurakami/following{/other_user}", + "gists_url": "https://api.github.com/users/ryanmurakami/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ryanmurakami/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ryanmurakami/subscriptions", + "organizations_url": "https://api.github.com/users/ryanmurakami/orgs", + "repos_url": "https://api.github.com/users/ryanmurakami/repos", + "events_url": "https://api.github.com/users/ryanmurakami/events{/privacy}", + "received_events_url": "https://api.github.com/users/ryanmurakami/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "url": "https://api.github.com/repos/nodejs/node/commits/92f163e4655b738370c781edc72bdd1b6bbfe8dd", + "html_url": "https://github.com/nodejs/node/commit/92f163e4655b738370c781edc72bdd1b6bbfe8dd" + } + ] + }, + { + "sha": "31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzFhMzRkNzk5MmMyY2I2ZmIxOWYyYzA4MThmMWY0OThiNDBhMTM1OA==", + "commit": { + "author": { + "name": "Daniel Bevenius", + "email": "daniel.bevenius@gmail.com", + "date": "2016-11-10T19:19:56Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:56Z" + }, + "message": "doc: fix minor style issue in code examples\n\nI've noticed that a few of the code examples have an minor\nindentation issue with the first line, for example:\n\nhttps://nodejs.org/api/child_process.html#child_process_child_process\nThis commit attempt to fix this issue by using the solution provided\nprovided by silverwind and hiendv.\n\nFixes: https://github.com/nodejs/node/issues/9381\nPR-URL: https://github.com/nodejs/node/pull/9482\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "d425ec01d87ac7fe5be07a1309a6c4ab2985d8ab", + "url": "https://api.github.com/repos/nodejs/node/git/trees/d425ec01d87ac7fe5be07a1309a6c4ab2985d8ab" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iIAAoJENi59a6uhOTPf+MP/1Trs0OsqieQIWFLEjwdf7lc\n80IlUkJ+H8o4ijVzdNrmZ588/7J2eycEFrbxOvPrmv9Y5OUJpdlyVyyzoDWzL5YW\nItUOY5Ex5PUoRkOfepFQHigoIdw3opdhgE4R1ZgFA1rR1GTbl/ONoSlScq8CIxQX\n19JCaPSaW+oHKasnWE/Oad9Rg2+A/JKsyEhkT3ynoM50ZNrUsR9cQ5x9L61IrruN\nWUR2XAuiuEj33x0KfDcrg4gRa+ZHbWO1QuzE7pnhRA+Ttd0ohXPjmmehv9M6IDuG\nJ61ec6EUJpnml5zDi/nFzzdV+u6x2S7UD7KlxDvGulYbUM+sVtKzs/ZxUJ/mLDFt\ngMBlK1Qqg50Xk/SWK+0ELZxEIK30VoWb529/VvJQl2NBwbeFXb0CDmjOfmRb1mVG\n0TYM7Sg4CQmNmbiI44rqYZYv1tgjsL3KF07I802Ge+8aUX/3xvFCK4XdC6OTbpsH\n3lQ+MpRzO2guUjXy/52hIQxDmaglshXrT1o6qUTXoYWu+yPZPU9M9rfkL5Egcgtl\n+hpmiSQA1FifHKe+7RV0x3T95H9ZEBAu8Q9Q1mstl2ks+++roX6BJiS8oUBat6lF\nf+Gy1VMzce9iXqnCnSGNbh93wX+s9x6sdY15c8JWQ0urWARFf007jChoA7EpZTaa\nUUzp5HRtKuNrCA/AJ099\n=hnU8\n-----END PGP SIGNATURE-----", + "payload": "tree d425ec01d87ac7fe5be07a1309a6c4ab2985d8ab\nparent a412b9fa9ab882f25270ed983a9b35420f2c9f73\nauthor Daniel Bevenius 1478805596 +0100\ncommitter Anna Henningsen 1479792776 +0100\n\ndoc: fix minor style issue in code examples\n\nI've noticed that a few of the code examples have an minor\nindentation issue with the first line, for example:\n\nhttps://nodejs.org/api/child_process.html#child_process_child_process\nThis commit attempt to fix this issue by using the solution provided\nprovided by silverwind and hiendv.\n\nFixes: https://github.com/nodejs/node/issues/9381\nPR-URL: https://github.com/nodejs/node/pull/9482\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "html_url": "https://github.com/nodejs/node/commit/31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/31a34d7992c2cb6fb19f2c0818f1f498b40a1358/comments", + "author": { + "login": "danbev", + "id": 432351, + "node_id": "MDQ6VXNlcjQzMjM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/432351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/danbev", + "html_url": "https://github.com/danbev", + "followers_url": "https://api.github.com/users/danbev/followers", + "following_url": "https://api.github.com/users/danbev/following{/other_user}", + "gists_url": "https://api.github.com/users/danbev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danbev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danbev/subscriptions", + "organizations_url": "https://api.github.com/users/danbev/orgs", + "repos_url": "https://api.github.com/users/danbev/repos", + "events_url": "https://api.github.com/users/danbev/events{/privacy}", + "received_events_url": "https://api.github.com/users/danbev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "url": "https://api.github.com/repos/nodejs/node/commits/a412b9fa9ab882f25270ed983a9b35420f2c9f73", + "html_url": "https://github.com/nodejs/node/commit/a412b9fa9ab882f25270ed983a9b35420f2c9f73" + } + ] + }, + { + "sha": "549b6f23dbb8c0fc219ea6893767078ed7032202", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NTQ5YjZmMjNkYmI4YzBmYzIxOWVhNjg5Mzc2NzA3OGVkNzAzMjIwMg==", + "commit": { + "author": { + "name": "Timothy", + "email": "zzzzBov@gmail.com", + "date": "2016-11-07T23:36:40Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:57Z" + }, + "message": "doc: fix fs constants link\n\nhttps://nodejs.org/api/fs.html#fs_fs_constants links to itself rather\nthan to https://nodejs.org/api/fs.html#fs_fs_constants_1\n\nPR-URL: https://github.com/nodejs/node/pull/9508\nReviewed-By: Luigi Pinca \nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Prince John Wesley \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "0b168748e00ab0d6b5d05bfb6fa1b477eb9055df", + "url": "https://api.github.com/repos/nodejs/node/git/trees/0b168748e00ab0d6b5d05bfb6fa1b477eb9055df" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/549b6f23dbb8c0fc219ea6893767078ed7032202", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iJAAoJENi59a6uhOTPzSsQAId24p+F96AVU6PBE1saxaKC\nffWV1xVW0qHDBECiohVFkJrbQtpuQ5rf/NfIgaj6XrQLB0NOnnWA+NMDduynXhNq\n1obAjPSnoIuA7gUCU8ON98/UGomM/UMcp3r555NixH68Czlvn5zWrhRkuivJP3P+\nRBajVhXcWxBDF9vffLA/j/xVdEkaDD1HmPm6t90uJYV7ambU9sacAGj40WRS+I3t\n5Jbhen75FHwi/AxFW9pPknyQqUlBdJW2o8Yu4xZP9s43DDYm8HlyCsIyYT1nCeCS\n2TcyKX0EMe9X3XI9zclIkzv361mkoAgUW/IdKXGP90xdW/jRgxmIGyS9AQC6zNYm\nkddF09Q/gYc5nCxKJEaelS5hPoy/VkPv/Ywcrdtw3LmKGleC9gkLJrLpF9+G9RL2\nwLWP39+7cnPUJo8NYmqbLMJ689o5aYDTjTVknuRE31A17cb4w6UFRAxWiXP6ZoGu\nFqm805vz6FJfuSC9KrhMyqirnuQk+Bu8hvRUd27MJMLA9f7E+qvuVWh4klUmkcjk\nLXFAc3dea6JQeWyLfDxjsk0RXxQOqGVHxiuvz/lU48/3P0NxhfKVeTdLR6TBOLuj\nmawF6yspQLKvyc4PJb5Pa4MYHTiS6L0b2fEK2RWpQvzx7F40hwWR5ny6Xj3hP4jg\ntkizBoXYK9nmRPGxoIAK\n=BwVz\n-----END PGP SIGNATURE-----", + "payload": "tree 0b168748e00ab0d6b5d05bfb6fa1b477eb9055df\nparent 31a34d7992c2cb6fb19f2c0818f1f498b40a1358\nauthor Timothy 1478561800 -0500\ncommitter Anna Henningsen 1479792777 +0100\n\ndoc: fix fs constants link\n\nhttps://nodejs.org/api/fs.html#fs_fs_constants links to itself rather\nthan to https://nodejs.org/api/fs.html#fs_fs_constants_1\n\nPR-URL: https://github.com/nodejs/node/pull/9508\nReviewed-By: Luigi Pinca \nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Prince John Wesley \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/549b6f23dbb8c0fc219ea6893767078ed7032202", + "html_url": "https://github.com/nodejs/node/commit/549b6f23dbb8c0fc219ea6893767078ed7032202", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/549b6f23dbb8c0fc219ea6893767078ed7032202/comments", + "author": { + "login": "zzzzBov", + "id": 518319, + "node_id": "MDQ6VXNlcjUxODMxOQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/518319?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/zzzzBov", + "html_url": "https://github.com/zzzzBov", + "followers_url": "https://api.github.com/users/zzzzBov/followers", + "following_url": "https://api.github.com/users/zzzzBov/following{/other_user}", + "gists_url": "https://api.github.com/users/zzzzBov/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zzzzBov/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zzzzBov/subscriptions", + "organizations_url": "https://api.github.com/users/zzzzBov/orgs", + "repos_url": "https://api.github.com/users/zzzzBov/repos", + "events_url": "https://api.github.com/users/zzzzBov/events{/privacy}", + "received_events_url": "https://api.github.com/users/zzzzBov/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "url": "https://api.github.com/repos/nodejs/node/commits/31a34d7992c2cb6fb19f2c0818f1f498b40a1358", + "html_url": "https://github.com/nodejs/node/commit/31a34d7992c2cb6fb19f2c0818f1f498b40a1358" + } + ] + }, + { + "sha": "7488b0041f956e6275050760809a47043e549320", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NzQ4OGIwMDQxZjk1NmU2Mjc1MDUwNzYwODA5YTQ3MDQzZTU0OTMyMA==", + "commit": { + "author": { + "name": "imatvieiev", + "email": "idmatvieiev@gmail.com", + "date": "2016-11-08T18:00:30Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:32:58Z" + }, + "message": "doc: added types to path docs\n\nPR-URL: https://github.com/nodejs/node/pull/9514\nReviewed-By: Roman Reiss ", + "tree": { + "sha": "2d07bab3122916dc841d32a017c4852425adea80", + "url": "https://api.github.com/repos/nodejs/node/git/trees/2d07bab3122916dc841d32a017c4852425adea80" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/7488b0041f956e6275050760809a47043e549320", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9iKAAoJENi59a6uhOTP3AYP/1A4LX0CUlPK6smzubu3S0zH\n3iwaK9gkPSfQ2P18cXDhcxoUNxEN3IqLPSNeWsTJpnVBrJdkro7ZslbAF8+tMTFO\nvbAIVWPN9JfeaYIN5hc+YUX3sk9PJqPNVC9ca7s6rrEz6RRCt1oHSfnlZBa/yy2G\ny25QdCP4rQfxC2wqIsPAvsV3ZNDhzyGi+Lel3eDm10diRLNNncutrsPtjGZKf3dr\ni/NQytBpNz4xOowj+pxJj7qRMEnsTjUN4GEvxvFEQiXLPmmB0+HXlUZeQLRLx6xT\nVrBtpjt9GiJYntBWd+Zo+KTH9PH5pA9UgFGRyPBa6yYnliLLJA3LB/TlGQU4s39K\nVSymBD545oJl9z49Fz7asbKk72tkXqEH98+ysgmOJwVkeTXO+TgDnN8WtQSUh7HR\nptaPsjxVHSBwIc8y3bhL8MEvUyo44BzgsB46Od74KHU2u7QfO7P3BJyU/jDRJ4nd\nXOjb+SAfiEYPX0XF2PSx1gboNsHeWNraAQwBZ6xizTskyMT2pQemedHlWqKkKFGc\n+vOlxJI54x+IuFB/0z3Zv/Jr65kHEvofyT5Z/LgRGtrUts+PMfYw0x5UNF6YOOoX\njqEPFODExWlGtK/mnDAezPuAY3RxfYVTU1Q7m6kGKA0qq/NsJx8jKC5ZSeokavJK\ng/c2IQJxkELnOBWkmvnr\n=LJWA\n-----END PGP SIGNATURE-----", + "payload": "tree 2d07bab3122916dc841d32a017c4852425adea80\nparent 549b6f23dbb8c0fc219ea6893767078ed7032202\nauthor imatvieiev 1478628030 +0200\ncommitter Anna Henningsen 1479792778 +0100\n\ndoc: added types to path docs\n\nPR-URL: https://github.com/nodejs/node/pull/9514\nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/7488b0041f956e6275050760809a47043e549320", + "html_url": "https://github.com/nodejs/node/commit/7488b0041f956e6275050760809a47043e549320", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/7488b0041f956e6275050760809a47043e549320/comments", + "author": { + "login": "imatveev", + "id": 10616396, + "node_id": "MDQ6VXNlcjEwNjE2Mzk2", + "avatar_url": "https://avatars.githubusercontent.com/u/10616396?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/imatveev", + "html_url": "https://github.com/imatveev", + "followers_url": "https://api.github.com/users/imatveev/followers", + "following_url": "https://api.github.com/users/imatveev/following{/other_user}", + "gists_url": "https://api.github.com/users/imatveev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/imatveev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/imatveev/subscriptions", + "organizations_url": "https://api.github.com/users/imatveev/orgs", + "repos_url": "https://api.github.com/users/imatveev/repos", + "events_url": "https://api.github.com/users/imatveev/events{/privacy}", + "received_events_url": "https://api.github.com/users/imatveev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "549b6f23dbb8c0fc219ea6893767078ed7032202", + "url": "https://api.github.com/repos/nodejs/node/commits/549b6f23dbb8c0fc219ea6893767078ed7032202", + "html_url": "https://github.com/nodejs/node/commit/549b6f23dbb8c0fc219ea6893767078ed7032202" + } + ] + }, + { + "sha": "77aded3ba1f6f601b2ca9779099640795a8d9b48", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NzdhZGVkM2JhMWY2ZjYwMWIyY2E5Nzc5MDk5NjQwNzk1YThkOWI0OA==", + "commit": { + "author": { + "name": "imatvieiev", + "email": "idmatvieiev@gmail.com", + "date": "2016-11-07T21:23:41Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:48Z" + }, + "message": "doc: add process api data types to documentation\n\nPR-URL: https://github.com/nodejs/node/pull/9505\nReviewed-By: Luigi Pinca \nReviewed-By: Brian White \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "520c8aedbcd05ccea1560cabad567595da6c2d27", + "url": "https://api.github.com/repos/nodejs/node/git/trees/520c8aedbcd05ccea1560cabad567595da6c2d27" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/77aded3ba1f6f601b2ca9779099640795a8d9b48", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i8AAoJENi59a6uhOTPZ8sP/jvr+MMM7IPUK3srJFB7Vng2\nBn7UwxO4SFGVFugLkEN+oCzIfhXB+CiNZXNnPz6PAiY+jzdQQRfUVbUCcgHXZHZ2\n8xIOzKcHdAmCHS0dRjZEpp6GC3/hS8L5BJIIfe5PgcdcUk4cgJKzqpH8ynP7kwVA\n8Fg4nl2C4uVRDlx0g6GFmwqsTBWEntq3nRZ5ozg5wf4S+W/8ZIFN6tBC65hqsDTx\n7cuAtY8x976LAwZ0L58OM4BQFz7i6O+8smuJ/PK1BiQqVas/GixwybR1S8S9ymmN\njI+/67cVN/yFnl0XDZypYa7MUdBfotqo24Bx2EQrJv06x0QlATlDEHh7j5z8/qvi\ncaSZ2YoztVJFhamAKRyxB6+0aOQKnhpJA8LwAlZ9WXVeoqjE6jXynV0Lobsz6xs0\ndmLgFxKOBGBO0OLyErDhYd8BTkbCPDl384hTtIExhQqAyTJ6XhoDtBds74BR6VOw\nmnI13kTLT2qO1cyvZ3ExjgG2tq/VOE/PEQ634GnZaeBmmTCEOnGXzLDQFCD0qcg1\nef758dkodQV7YWj5Ns+kD7EwKJzls8ciBfxzW3fmbD0FICy6LQYk/G1J8d3CCTPi\nQk9CA+EjUWiD4VQcT55y91VxUSyKlygmZlbYjkpA6gfJ+5Kvkt2jEGL0lbGI4iUX\nZMdc4XYTCLwDSl3ab6eM\n=22pw\n-----END PGP SIGNATURE-----", + "payload": "tree 520c8aedbcd05ccea1560cabad567595da6c2d27\nparent 7488b0041f956e6275050760809a47043e549320\nauthor imatvieiev 1478553821 +0200\ncommitter Anna Henningsen 1479792828 +0100\n\ndoc: add process api data types to documentation\n\nPR-URL: https://github.com/nodejs/node/pull/9505\nReviewed-By: Luigi Pinca \nReviewed-By: Brian White \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/77aded3ba1f6f601b2ca9779099640795a8d9b48", + "html_url": "https://github.com/nodejs/node/commit/77aded3ba1f6f601b2ca9779099640795a8d9b48", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/77aded3ba1f6f601b2ca9779099640795a8d9b48/comments", + "author": { + "login": "imatveev", + "id": 10616396, + "node_id": "MDQ6VXNlcjEwNjE2Mzk2", + "avatar_url": "https://avatars.githubusercontent.com/u/10616396?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/imatveev", + "html_url": "https://github.com/imatveev", + "followers_url": "https://api.github.com/users/imatveev/followers", + "following_url": "https://api.github.com/users/imatveev/following{/other_user}", + "gists_url": "https://api.github.com/users/imatveev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/imatveev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/imatveev/subscriptions", + "organizations_url": "https://api.github.com/users/imatveev/orgs", + "repos_url": "https://api.github.com/users/imatveev/repos", + "events_url": "https://api.github.com/users/imatveev/events{/privacy}", + "received_events_url": "https://api.github.com/users/imatveev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7488b0041f956e6275050760809a47043e549320", + "url": "https://api.github.com/repos/nodejs/node/commits/7488b0041f956e6275050760809a47043e549320", + "html_url": "https://github.com/nodejs/node/commit/7488b0041f956e6275050760809a47043e549320" + } + ] + }, + { + "sha": "d09a9f4d2781a114f8926a0355d5117980b1a838", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDA5YTlmNGQyNzgxYTExNGY4OTI2YTAzNTVkNTExNzk4MGIxYTgzOA==", + "commit": { + "author": { + "name": "William Kapke", + "email": "william.kapke@gmail.com", + "date": "2016-11-10T23:20:43Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:49Z" + }, + "message": "doc: remove Roadmap Working Group\n\nRefs: https://github.com/nodejs/CTC/issues/16\nPR-URL: https://github.com/nodejs/node/pull/9545\nReviewed-By: Ben Noordhuis \nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Johan Bergström \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "0813bde80c46a5c5e13623084509dcae8b26110a", + "url": "https://api.github.com/repos/nodejs/node/git/trees/0813bde80c46a5c5e13623084509dcae8b26110a" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d09a9f4d2781a114f8926a0355d5117980b1a838", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i9AAoJENi59a6uhOTPLiAP/1r7DGnb7//+BHU0aiv7ouXg\nQVnS7tW+YOLdRanQsa+/s825ylb/QIXUntbVzqTEwZlZx90RnszmmNjZspdNEcMn\nOwkQhIYcFE7OF231u6TFl1zXvlsqWuZ81wH7cEDEvJZK9CKXc0r15d8Zi377EqWy\nfamh2422aambpXR8QTrWB4/MxIWbabqmSxilO30+zA8Kh5nVdl0uIQxJOASbTbmx\n4SGOQVPlhxM+LF/dFcM6fjYlPukkQ8/h0p2jm6EGuZogOK7nI5i6KAfu0KSI7n8U\n/N+8pG+1q/3EyJUgG1N9Bc3dCoXTGN57hgvtj7QrB61rKKLW2gnKxLXi1DFB7xwr\ncDBUCj3m3oqhAnbpgItyunNgMUwZodpqETHzs5BT9G3oORCm3v2r4T4wwIPYQaHS\nKjgsfl2RtQtg5a6WC0viS+dGfl9oxYTDeZMImBem8a3Ig1/W57GxmD0SlK+tSMHc\nSpX69AEM58P93g732py0ela8dHRk24B/1dcYctCUfhdA9VTJLzSLnGN/x9qRwOrj\nsVwi/wCPbHYjKZ3/xllsEFPjP+LFHJfplATrNloMql/6GP5K5Xz4aHXNta7xR6Z+\nzhRzFHN6QMgcnfQc3682tsqG5/Nf8cyDaCFu0PLQhP8zWFxg5jI3wN3buPmlkUK+\nXamezCXVXEH9biAG3fPi\n=AGv/\n-----END PGP SIGNATURE-----", + "payload": "tree 0813bde80c46a5c5e13623084509dcae8b26110a\nparent 77aded3ba1f6f601b2ca9779099640795a8d9b48\nauthor William Kapke 1478820043 +0000\ncommitter Anna Henningsen 1479792829 +0100\n\ndoc: remove Roadmap Working Group\n\nRefs: https://github.com/nodejs/CTC/issues/16\nPR-URL: https://github.com/nodejs/node/pull/9545\nReviewed-By: Ben Noordhuis \nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Johan Bergström \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d09a9f4d2781a114f8926a0355d5117980b1a838", + "html_url": "https://github.com/nodejs/node/commit/d09a9f4d2781a114f8926a0355d5117980b1a838", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d09a9f4d2781a114f8926a0355d5117980b1a838/comments", + "author": { + "login": "williamkapke", + "id": 739813, + "node_id": "MDQ6VXNlcjczOTgxMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/739813?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/williamkapke", + "html_url": "https://github.com/williamkapke", + "followers_url": "https://api.github.com/users/williamkapke/followers", + "following_url": "https://api.github.com/users/williamkapke/following{/other_user}", + "gists_url": "https://api.github.com/users/williamkapke/gists{/gist_id}", + "starred_url": "https://api.github.com/users/williamkapke/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/williamkapke/subscriptions", + "organizations_url": "https://api.github.com/users/williamkapke/orgs", + "repos_url": "https://api.github.com/users/williamkapke/repos", + "events_url": "https://api.github.com/users/williamkapke/events{/privacy}", + "received_events_url": "https://api.github.com/users/williamkapke/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "77aded3ba1f6f601b2ca9779099640795a8d9b48", + "url": "https://api.github.com/repos/nodejs/node/commits/77aded3ba1f6f601b2ca9779099640795a8d9b48", + "html_url": "https://github.com/nodejs/node/commit/77aded3ba1f6f601b2ca9779099640795a8d9b48" + } + ] + }, + { + "sha": "7c9e8cbd762505430d4367ca167e93cbae4366ff", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6N2M5ZThjYmQ3NjI1MDU0MzBkNDM2N2NhMTY3ZTkzY2JhZTQzNjZmZg==", + "commit": { + "author": { + "name": "kohta ito", + "email": "kohta110@gmail.com", + "date": "2016-11-12T07:18:05Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:49Z" + }, + "message": "doc: fix the index order in pseudocode of modules\n\nfix the index order in pseudocode of modules.\n\nPR-URL: https://github.com/nodejs/node/pull/9562\nReviewed-By: Shigeki Ohtsu \nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "c4cf3dc3aeaa01e54c604fa98f5e94c77c099d99", + "url": "https://api.github.com/repos/nodejs/node/git/trees/c4cf3dc3aeaa01e54c604fa98f5e94c77c099d99" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/7c9e8cbd762505430d4367ca167e93cbae4366ff", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i9AAoJENi59a6uhOTP+wYP/3ufptyDJv6Ovvh0qlbBUHvK\n72foBNioqo6THeB9Sqb4hD4M6/im0IG63hKongopMb+DfH8GZkjnSo7b1ccCTLLJ\n0QXgV8hgRMRtWDkEeF5e3E2cK3QBa2B++CRSWWPThljcnnopMEFdoAPGpK4f9S83\nBJSpGPE27N8C9EKddsrZKXXAPczRqTDSLwIXwll+7TVzhZOvVQ9AGvpApEWXQ4sJ\nK0q+ZACiyJqH/Y+lScGLE3KLAXk0vGpam1L6lcq7GdIUmaubMR4+4kHxs9F/kAr2\n/dWVwxOCaSD9tEZEf36FnZz7JZypNl4A5X9Xi3wfstm9AJGb6ren1/3DpqVDbCGo\nzfRM3PthsuTi7z9RVXBo6zUSitGdTTRmF/R4/E10DnEflvPSMjvqndPqFYMw8nTB\nMWF/4Fp8DiYDYOriQb+jQ/7s+58w4/dzxVUuyULP28+sDwM/vEd8ERtwFITAQR2+\n9PV7938EM+UgfkHobbi/IwiUlrERgMjsZolk+jOILypYA423gYTQgnuT51kQNKXj\nd6uCMgaEywflHIca9mIOgMRDJu6l0EBhkPIrLiNhFDiG7SG9bkfjl5aOGZsh6Fio\nWoE45s50KfVMCQPh6HqMW94foE2Z2djNJVJEIjZOQ5evaQ6HapXjHGWMYwzZyABP\nHz4WPilsL/cQZfKjHjQx\n=ceUL\n-----END PGP SIGNATURE-----", + "payload": "tree c4cf3dc3aeaa01e54c604fa98f5e94c77c099d99\nparent d09a9f4d2781a114f8926a0355d5117980b1a838\nauthor kohta ito 1478935085 +0900\ncommitter Anna Henningsen 1479792829 +0100\n\ndoc: fix the index order in pseudocode of modules\n\nfix the index order in pseudocode of modules.\n\nPR-URL: https://github.com/nodejs/node/pull/9562\nReviewed-By: Shigeki Ohtsu \nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/7c9e8cbd762505430d4367ca167e93cbae4366ff", + "html_url": "https://github.com/nodejs/node/commit/7c9e8cbd762505430d4367ca167e93cbae4366ff", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/7c9e8cbd762505430d4367ca167e93cbae4366ff/comments", + "author": { + "login": "koh110", + "id": 1889831, + "node_id": "MDQ6VXNlcjE4ODk4MzE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1889831?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/koh110", + "html_url": "https://github.com/koh110", + "followers_url": "https://api.github.com/users/koh110/followers", + "following_url": "https://api.github.com/users/koh110/following{/other_user}", + "gists_url": "https://api.github.com/users/koh110/gists{/gist_id}", + "starred_url": "https://api.github.com/users/koh110/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/koh110/subscriptions", + "organizations_url": "https://api.github.com/users/koh110/orgs", + "repos_url": "https://api.github.com/users/koh110/repos", + "events_url": "https://api.github.com/users/koh110/events{/privacy}", + "received_events_url": "https://api.github.com/users/koh110/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d09a9f4d2781a114f8926a0355d5117980b1a838", + "url": "https://api.github.com/repos/nodejs/node/commits/d09a9f4d2781a114f8926a0355d5117980b1a838", + "html_url": "https://github.com/nodejs/node/commit/d09a9f4d2781a114f8926a0355d5117980b1a838" + } + ] + }, + { + "sha": "8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OGM4NTlkNThhYmEzZWViYTZiZDhmZDBkODQxNmM2YjE4OTcwOTk0OA==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-10T05:02:14Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:50Z" + }, + "message": "test: refactor test-tls-inception\n\n* buffer-to-string comparison replaced with string-to-string comparison\n* equal -> strictEqual\n* var -> const\n* rename identifiers to avoid masking\n\nPR-URL: https://github.com/nodejs/node/pull/9536\nReviewed-By: Santiago Gimeno \nReviewed-By: Michaël Zasso \nReviewed-By: Michael Dawson \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "ddb8937212309d2fff9cd6c553ae3fef98af931e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/ddb8937212309d2fff9cd6c553ae3fef98af931e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i+AAoJENi59a6uhOTPA6gP/0Fu9Fgp0o8+hBrizHIc81L7\nvnOhMxadU6rHNVfiIRLoiMkT4TpJdU0HEkcNShEY0tAIlxJgGDcq6WmqkQXKJNfw\n5aRIZbH1KiX1mPGP3e3oyYx+H6w9kMeVf9iAlIqcO3iwJRF2Tk49fa7UfeCeQfbf\nS9L28PpJXwaCnRvVij4sVZzLRaTjktY4H8L6dx4lC/aSnZXq85cTMIFWmq+bdbuJ\ncg/dQBPivXndNCAKC4RExt09InlgCavysTXyQCNkTIbkwa8Mrcwel6/2POgPBG1a\nm+4aC+PUZhzZrjIThxKD4kR/3cIErACEpWImfUyK8f8CClZ6z2iGc6fm6U9XWEVe\nwLB2IxyAOMFMUwn302JAVsKi+Z5MlKdkhVPgO+7GtjgFyy/00gJnFUZpfyGuE+lh\nN9vl6I5owBWL50T0a5ZCLOrU+oZ/D0FR5EvcWd5Wy54ghZc68/fXJ5gxFiJouHhA\nMILAY5ODOgTMzM1+C+/zxaHIaLvNrntqDQO3E8VwlvTT222/KfiosU2Y0+pntI6J\nH7Udch0mOm0GzhAwAa7NzcmlXMX0uGyXdZz0nVF9W/MA/ATK8PnyRerlPMy4wD7h\njPVr6DFlQD/7ymXqYb9jhbWgb5yimzrQr74zwKxAI+DX34L7M2Lkh9xOb/VpxM4s\nyiawfprBx6LLOMrT9Qcw\n=WOaI\n-----END PGP SIGNATURE-----", + "payload": "tree ddb8937212309d2fff9cd6c553ae3fef98af931e\nparent 7c9e8cbd762505430d4367ca167e93cbae4366ff\nauthor Rich Trott 1478754134 -0800\ncommitter Anna Henningsen 1479792830 +0100\n\ntest: refactor test-tls-inception\n\n* buffer-to-string comparison replaced with string-to-string comparison\n* equal -> strictEqual\n* var -> const\n* rename identifiers to avoid masking\n\nPR-URL: https://github.com/nodejs/node/pull/9536\nReviewed-By: Santiago Gimeno \nReviewed-By: Michaël Zasso \nReviewed-By: Michael Dawson \nReviewed-By: Colin Ihrig \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "html_url": "https://github.com/nodejs/node/commit/8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/8c859d58aba3eeba6bd8fd0d8416c6b189709948/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7c9e8cbd762505430d4367ca167e93cbae4366ff", + "url": "https://api.github.com/repos/nodejs/node/commits/7c9e8cbd762505430d4367ca167e93cbae4366ff", + "html_url": "https://github.com/nodejs/node/commit/7c9e8cbd762505430d4367ca167e93cbae4366ff" + } + ] + } + ] + \ No newline at end of file diff --git a/test/_fixtures/pull-request-commits-page-2.json b/test/_fixtures/pull-request-commits-page-2.json new file mode 100644 index 00000000..44aae2ef --- /dev/null +++ b/test/_fixtures/pull-request-commits-page-2.json @@ -0,0 +1,2373 @@ +[ + { + "sha": "dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZGFlM2QzZTUzYzViZWQ2MWRjNzBjYzYyNGM3ZmFjNTBjYTVhZjkyZA==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-10T06:09:56Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:50Z" + }, + "message": "test: refactor test-next-tick-error-spin\n\n* use common.mustCall()\n* setTimeout() -> setImmediate()\n* assert() -> assert.strictEqual()\n* var -> const\n* remove unneeded console.log()\n* remove commented-out code\n\nPR-URL: https://github.com/nodejs/node/pull/9537\nReviewed-By: Michael Dawson \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "5f1953500c8f50879ae5ea22da38bf5a4c63863a", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5f1953500c8f50879ae5ea22da38bf5a4c63863a" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i/AAoJENi59a6uhOTPES4P/RGPAwHYX7TqFQ9Kp1JH9TCT\nGY/IZziLRFA+fanAFFDRCNwSM2K3pwBJ9ZTvsoaU4Pb/knPiP1DcD/L28d+nR32d\nSEwKfwY7W5MeW/DAxL6CBeuCVXrrIlwurGBC5qJEwPYS9FsReRfz+/C/gfh/cvTv\ny4nlSyns3akLLdjOn+Cf+yiMBuznEzAS5yZgaZs2Q+XYsj0NacBQ8n4e7KUvXVcW\nAUDH6qyOLJc1O4gwTmC6DSaMMB9/xlc99ot+QGyDfdK09CzQNLYWHnAMI96pCOSk\n8iVV9diF3DQXvvLEE9VnUjHrIF4cK/GPt0vZ3djZm1yEeLQ7l14YYIDOzFLfHlpV\n6YxPFbUsV5AG7CotIuGZSOQ/LbVlOgGz+uquydtrRClcMizmQQgM0FwhuwRTG9WQ\nlGwSKEbbdlWPWpyu9vsyFZubc8pP00hERe5i70DOwILd0p6mkmJmYR2r7lQmE1+H\nG56qRwqJ3xGloEmyDGulaBrIRJXp/rwtHuMc2ncKyWdzz3D5hVKQfUqncDKxuZhL\nhBHHEOtAMCNRtDBgzpidYGe+/cjcaiWczmmtjI31RKHxiuTDeuntQm977cE/i8Bj\nKXaOg2eXlc4WI6ZV3hz6sVAiE5jIKxc65Z6P5KaXj5Hy+f1iUNYgdxVjw0QJM/y2\nvS+UN3GhMq1d45yTGI7Z\n=jE0w\n-----END PGP SIGNATURE-----", + "payload": "tree 5f1953500c8f50879ae5ea22da38bf5a4c63863a\nparent 8c859d58aba3eeba6bd8fd0d8416c6b189709948\nauthor Rich Trott 1478758196 -0800\ncommitter Anna Henningsen 1479792830 +0100\n\ntest: refactor test-next-tick-error-spin\n\n* use common.mustCall()\n* setTimeout() -> setImmediate()\n* assert() -> assert.strictEqual()\n* var -> const\n* remove unneeded console.log()\n* remove commented-out code\n\nPR-URL: https://github.com/nodejs/node/pull/9537\nReviewed-By: Michael Dawson \nReviewed-By: Colin Ihrig \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "html_url": "https://github.com/nodejs/node/commit/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "url": "https://api.github.com/repos/nodejs/node/commits/8c859d58aba3eeba6bd8fd0d8416c6b189709948", + "html_url": "https://github.com/nodejs/node/commit/8c859d58aba3eeba6bd8fd0d8416c6b189709948" + } + ] + }, + { + "sha": "64dec14502ab41036c23da7f501b4fc83945f427", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NjRkZWMxNDUwMmFiNDEwMzZjMjNkYTdmNTAxYjRmYzgzOTQ1ZjQyNw==", + "commit": { + "author": { + "name": "ikasumi_wt", + "email": "wtsnyk13@gmail.com", + "date": "2016-11-12T07:19:47Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:51Z" + }, + "message": "doc: fix e.g., to e.g. in doc/http.md\n\nfix e.g., to e.g. in doc/http.md\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9564\nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "de2edfd0a528a521c519c7274d7f9ace7fedb5f6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/de2edfd0a528a521c519c7274d7f9ace7fedb5f6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/64dec14502ab41036c23da7f501b4fc83945f427", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9i/AAoJENi59a6uhOTPQ78P/R3yeOBZzIPTUPNh+xaQT+uz\nUX69mQxFe13gk6S6HuikShZpkE4VHm7PpcoCez0uATJUd+d9pJgIwkHp3l/6VVih\nL19YnFnVq1uSU3bk4np4BgCtG89EfM2sLfxEzSoKXQbSwNWWgnrOhZf2aWJQUIQ7\n7CIHKmzSVSm46dITq8+Wrybg/4tXf+ADSvYL/QmSX8AnV8YpT3JhdRWLWFbvOQpM\nXfkoHJN+XThAGHoRFsBYdz32SKUw+SQ0164jXJ+ufwOT/1a8OeWbgqSfnGZ9yuDw\ntQ8qZuv6HAEWEBmtceOkjsCYhgTSr1mxBZVEsYAuCV+YnMmis6NXPGxwDowJKCT5\nJorpDEKtV//uSp+qkBy3YMwfXHfsTZM9PZwJS+TVngOGk3CN9wVDl8KRCDN+7Sbd\nV07PnljvsXlsdsD9u2haLsQKk6kOcfSbwK8c4Pn7oivzZMjwx0WxEoEZ6FNN8gag\nQMzruK/LEWNOqvMxZscrTAds95yB8jQ+yenU4ST7rMzLf7l5YWsOrSkMiCZM+l2U\nigJvdVy/0iCQ80AfW2FEtkM0V78l5IK0U2X+ejK/ov/HcGR2ajX4C07NixH++BmK\n+6Katm/Y2fVYjzVvb8EGEw3lhZzL01yBJpSKZTBl+IzUTGfMtuMpJG+IMhDa3z8P\nbL7sW4RKprxiub9vbpmd\n=3Htw\n-----END PGP SIGNATURE-----", + "payload": "tree de2edfd0a528a521c519c7274d7f9ace7fedb5f6\nparent dae3d3e53c5bed61dc70cc624c7fac50ca5af92d\nauthor ikasumi_wt 1478935187 +0900\ncommitter Anna Henningsen 1479792831 +0100\n\ndoc: fix e.g., to e.g. in doc/http.md\n\nfix e.g., to e.g. in doc/http.md\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9564\nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/64dec14502ab41036c23da7f501b4fc83945f427", + "html_url": "https://github.com/nodejs/node/commit/64dec14502ab41036c23da7f501b4fc83945f427", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/64dec14502ab41036c23da7f501b4fc83945f427/comments", + "author": { + "login": "ikasumiwt", + "id": 4006425, + "node_id": "MDQ6VXNlcjQwMDY0MjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/4006425?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ikasumiwt", + "html_url": "https://github.com/ikasumiwt", + "followers_url": "https://api.github.com/users/ikasumiwt/followers", + "following_url": "https://api.github.com/users/ikasumiwt/following{/other_user}", + "gists_url": "https://api.github.com/users/ikasumiwt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ikasumiwt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ikasumiwt/subscriptions", + "organizations_url": "https://api.github.com/users/ikasumiwt/orgs", + "repos_url": "https://api.github.com/users/ikasumiwt/repos", + "events_url": "https://api.github.com/users/ikasumiwt/events{/privacy}", + "received_events_url": "https://api.github.com/users/ikasumiwt/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "url": "https://api.github.com/repos/nodejs/node/commits/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d", + "html_url": "https://github.com/nodejs/node/commit/dae3d3e53c5bed61dc70cc624c7fac50ca5af92d" + } + ] + }, + { + "sha": "e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZTdlYjljY2RjZmE3MTkzYjdiMzczNmIyZjY1MjJiOGQ1YzQ5M2Q0MA==", + "commit": { + "author": { + "name": "Yoshiya Hinosawa", + "email": "stibium121@gmail.com", + "date": "2016-11-12T07:26:52Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:52Z" + }, + "message": "test: improve test-stream2-objects.js\n\nThis commit improves the test cases in\ntest-stream2-objects.js by using assert.strictEqual\ninstead of assert.equal.\n\nThis is a part of Code And Learn at NodeFest 2016\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9565\nReviewed-By: Shigeki Ohtsu \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "f9c9455abce7f05da782836ded7df77a66400da0", + "url": "https://api.github.com/repos/nodejs/node/git/trees/f9c9455abce7f05da782836ded7df77a66400da0" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jAAAoJENi59a6uhOTPMCYQAJY7brLIwrx7q9ObiCqr6Noi\nExflJXq1wDe6R5pPFwCZRg4MTxDvXKXe2hKtbdv44q7CKVu779olBwS/vyrRxusX\nt03E16mV2RbuxregVGVqmrn9Ix1cdYgdDxPwB3/gn/WjeYIXwRIncre/zxxuhp+3\n74ib84wz06yxfVn1lF+Zmr6MGooT2xHY+msnrl+nQ7ecxF6Htw2BIdXteZcvl0ZT\n9V6X8Ta0YugHyz1m0i+9uVATRmIfyUf3hk9AujKuU9/2ej0W2wnoatkw8q7S+BA7\nL+LK/iI/+FxqE0PJAYky8wBf3yyVIE2C9777RHAIfAeDx+qFaUbSP5h/RUbRqRuv\npN76misQgULl26XAE49bJmlaBTriGUJVp9zgvF9pAvNipJ7DbB8nTGNyr/uXwyAL\nGpIH/tP5YHq7mOxLO//wP64XSK7F4CpGlzmrNRyTRvYKTjZ7isSa0OEa/AVgvMgW\nkZfvdERrGLmhXcK77KmZk+Hv8VQcRp1cRBvejUN1hyEWZju4cnklQibke8Pu8fGX\n8UvbEbU9zBetLgX5haxH+uufivaL3a+47BQ9krEX0l4EIjbrJys6vd5n/adnd9pD\nQkTPgGCj6ywgVEryfG6oaAKYIi/bfaGZXyRot9nlTGe2YZkL6MVeYgz7nAq84JIl\n/T7/593VKlPKDvgfUmeB\n=HMAz\n-----END PGP SIGNATURE-----", + "payload": "tree f9c9455abce7f05da782836ded7df77a66400da0\nparent 64dec14502ab41036c23da7f501b4fc83945f427\nauthor Yoshiya Hinosawa 1478935612 +0900\ncommitter Anna Henningsen 1479792832 +0100\n\ntest: improve test-stream2-objects.js\n\nThis commit improves the test cases in\ntest-stream2-objects.js by using assert.strictEqual\ninstead of assert.equal.\n\nThis is a part of Code And Learn at NodeFest 2016\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9565\nReviewed-By: Shigeki Ohtsu \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "html_url": "https://github.com/nodejs/node/commit/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40/comments", + "author": { + "login": "kt3k", + "id": 613956, + "node_id": "MDQ6VXNlcjYxMzk1Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/613956?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kt3k", + "html_url": "https://github.com/kt3k", + "followers_url": "https://api.github.com/users/kt3k/followers", + "following_url": "https://api.github.com/users/kt3k/following{/other_user}", + "gists_url": "https://api.github.com/users/kt3k/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kt3k/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kt3k/subscriptions", + "organizations_url": "https://api.github.com/users/kt3k/orgs", + "repos_url": "https://api.github.com/users/kt3k/repos", + "events_url": "https://api.github.com/users/kt3k/events{/privacy}", + "received_events_url": "https://api.github.com/users/kt3k/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "64dec14502ab41036c23da7f501b4fc83945f427", + "url": "https://api.github.com/repos/nodejs/node/commits/64dec14502ab41036c23da7f501b4fc83945f427", + "html_url": "https://github.com/nodejs/node/commit/64dec14502ab41036c23da7f501b4fc83945f427" + } + ] + }, + { + "sha": "4ae4e00ae94a0b0039876e06db59381ccfa27998", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NGFlNGUwMGFlOTRhMGIwMDM5ODc2ZTA2ZGI1OTM4MWNjZmEyNzk5OA==", + "commit": { + "author": { + "name": "YutamaKotaro", + "email": "california.dreamin.never.die@gmail.com", + "date": "2016-11-12T07:36:06Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:52Z" + }, + "message": "doc: fix typo about cluster doc, (eg. -> e.g.)\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9568\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "c8fb88289d094c386428bfd93876ba735bdf4dae", + "url": "https://api.github.com/repos/nodejs/node/git/trees/c8fb88289d094c386428bfd93876ba735bdf4dae" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/4ae4e00ae94a0b0039876e06db59381ccfa27998", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jAAAoJENi59a6uhOTPMtsP/0vjczEj4jnHI3aP5yhu3YPU\ntefagfiPqNwQEzPhUzN2O31+53RuhajpZra0vQIaaIDc3Tv65WOOI56PUskiAHTS\nD6xtF/dx9EW3OrMcpgD9U/bxykrgodNvr1QtR6mvqGKubBgU9GXtgINExX5fiO/l\ncY9+OMdD/Gcpj3ILV8MuGP3u/0bWrQn0cj10W/32IH38HCK11wr5hlVg2lPGOsxJ\n+cqYmHhnl1D0ZcU9KZQQ0+jffrj+Ua6REl2cTfWEf4LsUnXZumq2L1d70ialwslc\n/b+Ehe70wzDx3KBhXpLL2VbkKrUxNlr4FWfoLJw2qKQkq69ln6l0u7C/gVcMAxaD\n5x6epZrxq9uVDgKMp+UAi1GA60E6Q1yzNartR58X4hy5EXZxdViTb/t1FTbygh8X\nidZM8fIUSLFdMHPuKTZJoMNIfPVLgCBub8GGI8h6gipUA4Tp7o6/yNPUdP32AV2q\nT/ayqnJFf4l5tojmBS2HMdch5A4KWp6yNyBlnSl60+bwIW+bISGmy/hpQ3IK368I\nS5hg6nhJqzuoj/rzIUV99qjD2SdcUNotw2a2Gb7lklnSZr7e7Uh/wJriUSpM5thq\npo4ErVfPH08fMNzZ2Jq4vOhDNHzxT0nyAL+GcLW9S8oslfrkM4tMT59REAf+9kzS\n4HOKbDCV+VsA4SDZ9wV4\n=SqmT\n-----END PGP SIGNATURE-----", + "payload": "tree c8fb88289d094c386428bfd93876ba735bdf4dae\nparent e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40\nauthor YutamaKotaro 1478936166 +0900\ncommitter Anna Henningsen 1479792832 +0100\n\ndoc: fix typo about cluster doc, (eg. -> e.g.)\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9568\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/4ae4e00ae94a0b0039876e06db59381ccfa27998", + "html_url": "https://github.com/nodejs/node/commit/4ae4e00ae94a0b0039876e06db59381ccfa27998", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/4ae4e00ae94a0b0039876e06db59381ccfa27998/comments", + "author": { + "login": "YutamaKotaro", + "id": 19544218, + "node_id": "MDQ6VXNlcjE5NTQ0MjE4", + "avatar_url": "https://avatars.githubusercontent.com/u/19544218?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/YutamaKotaro", + "html_url": "https://github.com/YutamaKotaro", + "followers_url": "https://api.github.com/users/YutamaKotaro/followers", + "following_url": "https://api.github.com/users/YutamaKotaro/following{/other_user}", + "gists_url": "https://api.github.com/users/YutamaKotaro/gists{/gist_id}", + "starred_url": "https://api.github.com/users/YutamaKotaro/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/YutamaKotaro/subscriptions", + "organizations_url": "https://api.github.com/users/YutamaKotaro/orgs", + "repos_url": "https://api.github.com/users/YutamaKotaro/repos", + "events_url": "https://api.github.com/users/YutamaKotaro/events{/privacy}", + "received_events_url": "https://api.github.com/users/YutamaKotaro/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "url": "https://api.github.com/repos/nodejs/node/commits/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40", + "html_url": "https://github.com/nodejs/node/commit/e7eb9ccdcfa7193b7b3736b2f6522b8d5c493d40" + } + ] + }, + { + "sha": "58fc7a137c71ecc9abdad40846259121f26f8328", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NThmYzdhMTM3YzcxZWNjOWFiZGFkNDA4NDYyNTkxMjFmMjZmODMyOA==", + "commit": { + "author": { + "name": "MURAKAMI Masahiko", + "email": "fossamagna2@gmail.com", + "date": "2016-11-12T08:04:42Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:53Z" + }, + "message": "test: change from setTimeout to setImmediate\n\nThis is a part of Code And Learn at NodeFest 2016 Challenge\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9578\nReviewed-By: Yosuke Furukawa \nReviewed-By: Shigeki Ohtsu \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "5c2557e934f01a6b6b8fe305e09c79e7153a292e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5c2557e934f01a6b6b8fe305e09c79e7153a292e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/58fc7a137c71ecc9abdad40846259121f26f8328", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jBAAoJENi59a6uhOTPutAP/jmUK7pPylnxggSs9ALYn9iW\naWPfBuJ+gMQC0XdoKeOp/bALJUNFl9oziwD3HTXOA4hEolvzL+caPy5pxHnNrWHY\nK5ABHcPsPRloImlGWbdV/Fh6V8lou+lPtFXxcYYq0jUV6B+NpmMZwXWdDEEfUDUV\nKkNW8+zXZvnNxnXxON8zeMFUiN9WG/MWp9m82ft1MebEoWPBt5Ixcfc5fyxKSV3z\n++8hR6Tm5RbfLfJuPBleJmykArUuUDHScjQPSYpXTK9uiAqfaE1K8cbtRc3y1IhN\nga/BIUSuwHTckEBTwD8OzcrrjSxqNoApKAWRz6TUdl7zQIGCoTrSgmcoP0OgtKUZ\nGvoeDzmNnFkFm2VMkqm+wlcXbN60VnyIYUAVulPloeb5e/NwEuW0jS4IllFiVBUy\npnx1W+TU1cwo2hFEsC98luMN1SsR66E8OB6FxQFR9NWbagmtM7UQAuixyYrjAddU\nvoslCHcGyxcm+DsjMcHTJhziXFC/C/NpeSwItJcXuSr3G5AfGU9ns4YeNAUDkBSb\nfwyST7Bu9BLJQ3xk2Jl40i510Tj8uGoj8gKQls9aPSC1nCcVfkq+ZTKnaWXXi6eg\n78vaOf1puDVTXNRlWSQh7o5CzJ2KickViToUVLFu2tVEvDBxB/lDuM6kYisz5wbg\nTpZP46xVLTMksAmyKEo6\n=RZNN\n-----END PGP SIGNATURE-----", + "payload": "tree 5c2557e934f01a6b6b8fe305e09c79e7153a292e\nparent 4ae4e00ae94a0b0039876e06db59381ccfa27998\nauthor MURAKAMI Masahiko 1478937882 +0900\ncommitter Anna Henningsen 1479792833 +0100\n\ntest: change from setTimeout to setImmediate\n\nThis is a part of Code And Learn at NodeFest 2016 Challenge\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9578\nReviewed-By: Yosuke Furukawa \nReviewed-By: Shigeki Ohtsu \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/58fc7a137c71ecc9abdad40846259121f26f8328", + "html_url": "https://github.com/nodejs/node/commit/58fc7a137c71ecc9abdad40846259121f26f8328", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/58fc7a137c71ecc9abdad40846259121f26f8328/comments", + "author": { + "login": "fossamagna", + "id": 1638848, + "node_id": "MDQ6VXNlcjE2Mzg4NDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1638848?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fossamagna", + "html_url": "https://github.com/fossamagna", + "followers_url": "https://api.github.com/users/fossamagna/followers", + "following_url": "https://api.github.com/users/fossamagna/following{/other_user}", + "gists_url": "https://api.github.com/users/fossamagna/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fossamagna/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fossamagna/subscriptions", + "organizations_url": "https://api.github.com/users/fossamagna/orgs", + "repos_url": "https://api.github.com/users/fossamagna/repos", + "events_url": "https://api.github.com/users/fossamagna/events{/privacy}", + "received_events_url": "https://api.github.com/users/fossamagna/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "4ae4e00ae94a0b0039876e06db59381ccfa27998", + "url": "https://api.github.com/repos/nodejs/node/commits/4ae4e00ae94a0b0039876e06db59381ccfa27998", + "html_url": "https://github.com/nodejs/node/commit/4ae4e00ae94a0b0039876e06db59381ccfa27998" + } + ] + }, + { + "sha": "92bd19e0bdfb24776db6c5b325975843435acc62", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OTJiZDE5ZTBiZGZiMjQ3NzZkYjZjNWIzMjU5NzU4NDM0MzVhY2M2Mg==", + "commit": { + "author": { + "name": "Thomas Watson Steen", + "email": "w@tson.dk", + "date": "2016-11-12T03:17:52Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:53Z" + }, + "message": "doc: simplify process.memoryUsage() example code\n\nUsing util.inspect doesn't change the output in this case\n\nPR-URL: https://github.com/nodejs/node/pull/9560\nReviewed-By: Myles Borins \nReviewed-By: Rich Trott \nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "3226843f794c1d83da28011f1e132fb60eac719e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3226843f794c1d83da28011f1e132fb60eac719e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/92bd19e0bdfb24776db6c5b325975843435acc62", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jBAAoJENi59a6uhOTPrO8P/3LDk3SXx50eP9/XV+gynRKa\nIpGcZxJgIiMTK00v1bdRDhHRqp5n2HtJ3OTqTG742s5b5f67AC4cateq4DgYNFw/\nKbzggaJKycP0tiggNIFUdqCODxWERvVfzN4XOgUKjbIVEHaVPgQwHdkhgjgaO3XA\nhLnD/T15cwKhE0P54pb2aVCYCi1cL2qbg/JrvzGaQXBUWCscauxNyJZiIwKQk6mn\ncf9X8ZRQa0hN05ryxzk7k16hcVhIY/ghH2U5Pl6PtJwdYSqdfsAeXviAhv0HbaiZ\nO6rmaiM8FziaUxfqUit8bkmLmvPe793WZh3rEZYOqeo4u6t9osYgsfPA2gBDb9kV\n4MmMmdhDTYQ32CEUoIAS9BNYFZSYAzo3OHOidmHAtBEM9jtLPZZ7fL7Nk6IuXdkA\n59NCQ9DyWHi9EUjS40il8fZMDjIYSBAKOhwrYhHGwd06WDaUfVHbl5J4MSeo9TC4\no47GDxAACHGxmUYTYVcGnRs4kxBJZKasmlfgCC+t1hzJv2nsVQgJbfG3PRmp8lbn\nkP4k+o9KJkUvf16/13/SWxUWrKyOwBnLX8nZX80+7uZpQiEN6iwhAJXhYsC3FHE+\n0UizZ3dciDrOcGYR4cAJQPYtcRRQECH+mBXfzQSYUGnyQh5x40ygacw0fLpNnQBz\npME7q6oesPiLSMCYAyrp\n=hUPT\n-----END PGP SIGNATURE-----", + "payload": "tree 3226843f794c1d83da28011f1e132fb60eac719e\nparent 58fc7a137c71ecc9abdad40846259121f26f8328\nauthor Thomas Watson Steen 1478920672 +0900\ncommitter Anna Henningsen 1479792833 +0100\n\ndoc: simplify process.memoryUsage() example code\n\nUsing util.inspect doesn't change the output in this case\n\nPR-URL: https://github.com/nodejs/node/pull/9560\nReviewed-By: Myles Borins \nReviewed-By: Rich Trott \nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/92bd19e0bdfb24776db6c5b325975843435acc62", + "html_url": "https://github.com/nodejs/node/commit/92bd19e0bdfb24776db6c5b325975843435acc62", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/92bd19e0bdfb24776db6c5b325975843435acc62/comments", + "author": { + "login": "watson", + "id": 10602, + "node_id": "MDQ6VXNlcjEwNjAy", + "avatar_url": "https://avatars.githubusercontent.com/u/10602?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/watson", + "html_url": "https://github.com/watson", + "followers_url": "https://api.github.com/users/watson/followers", + "following_url": "https://api.github.com/users/watson/following{/other_user}", + "gists_url": "https://api.github.com/users/watson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/watson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/watson/subscriptions", + "organizations_url": "https://api.github.com/users/watson/orgs", + "repos_url": "https://api.github.com/users/watson/repos", + "events_url": "https://api.github.com/users/watson/events{/privacy}", + "received_events_url": "https://api.github.com/users/watson/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "58fc7a137c71ecc9abdad40846259121f26f8328", + "url": "https://api.github.com/repos/nodejs/node/commits/58fc7a137c71ecc9abdad40846259121f26f8328", + "html_url": "https://github.com/nodejs/node/commit/58fc7a137c71ecc9abdad40846259121f26f8328" + } + ] + }, + { + "sha": "d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDUzMmE1N2E0YjAwN2U1YTc0YmE5OTAxYzZhYTFlZmY4Y2U2NzZhZg==", + "commit": { + "author": { + "name": "Roman Reiss", + "email": "me@silverwind.io", + "date": "2016-11-11T20:29:01Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:54Z" + }, + "message": "doc: consistent 'Returns:'\n\nFor consistency, changed all `Return:` to `Returns:` in the API docs.\n\nPR-URL: https://github.com/nodejs/node/pull/9554\nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Jeremiah Senkpiel ", + "tree": { + "sha": "a0259899e69a964aebd7daf44b4aca11b6d85a42", + "url": "https://api.github.com/repos/nodejs/node/git/trees/a0259899e69a964aebd7daf44b4aca11b6d85a42" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jCAAoJENi59a6uhOTPHwwP/0+ES6fQ+2l4498bzb/Fjh4m\ndRBh0sFjEzk/ThrrAp12s6XHiwBY3pgtPHf6ph6qPdnpbQqt+uwpnoED7imNppGC\npHSClyp5JRkKrcA4FSfk073p8TS3Y0QnA+1JeELNl1p01jjWnUZsS8G8ax+Bk9On\nen6M65uwHZr+gGzCdTk+s8hx5iF52nCkU8+nI5lBTfh3kPzcA0Liz8h1iOAcANps\n0QPwfaSNGI+FCdqd8/GR/AKDefZ9xzl2G3XxyT9sZ+InPFrY6PWP70kVMbBbxLL3\nT+CbWWncCsDlZZ2n1O9tpaBQPedDJ8GjaqYVmGCKt2i1OxNekk5OwLX1jHYLHB9k\nyvmQvve0anXcin0Cl6Bc1rDKJlEH1Y8rpEkil6B+Rbg8JtrIqaKNZ+O/+FFfWKHQ\n9GjXy4+D3nilPQbJynRFW4org0QNQKUMG1gI7EnxngW/23NTGk+XRw15jZqvZh/3\noWtqXUzefpQyMldRWnDDe8xSX198KFtkM2WIgxCajHPLXzLkJ0HT4ElRp5xc8/lx\nXWz/9SwdpbJ4PrLywjkmDVEU7VBdtBa6vunu3XDAwI5mtZpN3wtMx9pn+hkzGz3z\ncdb3u+S1mHYnpccC02bSkf7ABHlunckir0MIdwTpIq62/gIScb0PqrG+wONHA924\ngvke2ddG7u6k+C7kWu2j\n=rYur\n-----END PGP SIGNATURE-----", + "payload": "tree a0259899e69a964aebd7daf44b4aca11b6d85a42\nparent 92bd19e0bdfb24776db6c5b325975843435acc62\nauthor Roman Reiss 1478896141 +0100\ncommitter Anna Henningsen 1479792834 +0100\n\ndoc: consistent 'Returns:'\n\nFor consistency, changed all `Return:` to `Returns:` in the API docs.\n\nPR-URL: https://github.com/nodejs/node/pull/9554\nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Jeremiah Senkpiel \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "html_url": "https://github.com/nodejs/node/commit/d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d532a57a4b007e5a74ba9901c6aa1eff8ce676af/comments", + "author": { + "login": "silverwind", + "id": 115237, + "node_id": "MDQ6VXNlcjExNTIzNw==", + "avatar_url": "https://avatars.githubusercontent.com/u/115237?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/silverwind", + "html_url": "https://github.com/silverwind", + "followers_url": "https://api.github.com/users/silverwind/followers", + "following_url": "https://api.github.com/users/silverwind/following{/other_user}", + "gists_url": "https://api.github.com/users/silverwind/gists{/gist_id}", + "starred_url": "https://api.github.com/users/silverwind/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/silverwind/subscriptions", + "organizations_url": "https://api.github.com/users/silverwind/orgs", + "repos_url": "https://api.github.com/users/silverwind/repos", + "events_url": "https://api.github.com/users/silverwind/events{/privacy}", + "received_events_url": "https://api.github.com/users/silverwind/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "92bd19e0bdfb24776db6c5b325975843435acc62", + "url": "https://api.github.com/repos/nodejs/node/commits/92bd19e0bdfb24776db6c5b325975843435acc62", + "html_url": "https://github.com/nodejs/node/commit/92bd19e0bdfb24776db6c5b325975843435acc62" + } + ] + }, + { + "sha": "d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDgzY2I0OGIzYTIwNTlhYmVjM2NmYjgwMGE2NWFhNWMwMTNkMmJlMA==", + "commit": { + "author": { + "name": "Daijiro Yamada", + "email": "yamad@daiji.ro", + "date": "2016-11-12T07:24:46Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:54Z" + }, + "message": "doc: fix typo e.g., => e.g.\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9563\nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "93843f98d6a955c4c6ce9239a4ed9962ea2f41d3", + "url": "https://api.github.com/repos/nodejs/node/git/trees/93843f98d6a955c4c6ce9239a4ed9962ea2f41d3" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jCAAoJENi59a6uhOTPGdgQALu/6R3ZPJc/IWvEV0LPwqNV\niq6Fp8FCewc4bz8wop1SA2i0gNsTy9QA75bEz8nlosZ58JsUy04ZzJsmdUmuP6z0\n45DLiEQzXIrojAjMxcOb5nM1lxvLbOYtwcQqhDtNIzum/fZAixYp0T5COJbR/Y6w\nRy6mLJkJAMLVYkTEyfthDsJL14Dk7pT4LqWqYb/nwZ9QOXIEEvtvRaqotn0pLUKB\nevXBZjV+YBGQw6xLTYyQYo/fB0vm8P7xH1EmYYCA4qmJkRJjrK7sMLhkY/pLIVOH\nzKOATBq3cYR3breR43aaNlzZQRtVJrn6cAtv4mc49mgIzgmzRV2hnftzQEiI52o6\n8jvEZSZh/SpyVBkwk4uWklqpI227an2FYa404aNf9RA+p2PTLJh8WYEhJvX9sJ6U\n+ajk2JbmjmZFHfQTM7ophTJwJGnHGL8flCMLJMZVCy9eExDLNrTfgVEPvt6IMUPz\nr+mo43/2FlRZWL4c28pprBoHkmXD11w2cWQuWHWwjM8rbaYFn0reMl2I/NGxJeZG\n3PsuasIwQ5GyYUCB2P2V0Eu/nEhUBjfmfnRhQ3bZ1ObXluWk8gU1gMzbPSnhwuXn\nvuWJ3klHKpsroZCh6tiMVTqFzHGR8/2WTm9XCmeK3boKGr9MlJNbBtIMXizKeROk\nt5C/3tJbKF2X6Y/l7utX\n=hbzk\n-----END PGP SIGNATURE-----", + "payload": "tree 93843f98d6a955c4c6ce9239a4ed9962ea2f41d3\nparent d532a57a4b007e5a74ba9901c6aa1eff8ce676af\nauthor Daijiro Yamada 1478935486 +0900\ncommitter Anna Henningsen 1479792834 +0100\n\ndoc: fix typo e.g., => e.g.\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9563\nReviewed-By: Yosuke Furukawa \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "html_url": "https://github.com/nodejs/node/commit/d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d83cb48b3a2059abec3cfb800a65aa5c013d2be0/comments", + "author": { + "login": "dorako321", + "id": 857898, + "node_id": "MDQ6VXNlcjg1Nzg5OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/857898?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dorako321", + "html_url": "https://github.com/dorako321", + "followers_url": "https://api.github.com/users/dorako321/followers", + "following_url": "https://api.github.com/users/dorako321/following{/other_user}", + "gists_url": "https://api.github.com/users/dorako321/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dorako321/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dorako321/subscriptions", + "organizations_url": "https://api.github.com/users/dorako321/orgs", + "repos_url": "https://api.github.com/users/dorako321/repos", + "events_url": "https://api.github.com/users/dorako321/events{/privacy}", + "received_events_url": "https://api.github.com/users/dorako321/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "url": "https://api.github.com/repos/nodejs/node/commits/d532a57a4b007e5a74ba9901c6aa1eff8ce676af", + "html_url": "https://github.com/nodejs/node/commit/d532a57a4b007e5a74ba9901c6aa1eff8ce676af" + } + ] + }, + { + "sha": "163397a206aecce0b18b304f73456a569bb06733", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTYzMzk3YTIwNmFlY2NlMGIxOGIzMDRmNzM0NTZhNTY5YmIwNjczMw==", + "commit": { + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com", + "date": "2016-11-12T21:49:40Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:33:55Z" + }, + "message": "process: add `process.memoryUsage.external`\n\nPR-URL: https://github.com/nodejs/node/pull/9587\nReviewed-By: Ben Noordhuis \nReviewed-By: Matteo Collina \nReviewed-By: Michaël Zasso \nReviewed-By: Johan Bergström \nReviewed-By: Colin Ihrig \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "2a48e10db5ae481b1ea3a3b0f34635d791cdade6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/2a48e10db5ae481b1ea3a3b0f34635d791cdade6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/163397a206aecce0b18b304f73456a569bb06733", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9jDAAoJENi59a6uhOTPJmYP/iJXNf1gC87z0ky1qOV1/vRR\nUX1eX4H6O/FFFWAoYmAHQ9LqqdXLQb9qu+aBZ4Uta9UZvJyG3ncNVBaF9fqi3DLh\n6LxdUVyTWxYQpuwi48U5O42eiqspZhg1dn95TI1IluwA0aJO+IC5NL6d/N/kfXcp\nACbTVab2cqAaEQesYNRzUsaKPWdjgbvK2icmFidiwM1sZoOE52VpK6iHjWmqKcQD\nIc/chOQHMV+cJQahIFT6n4fCGlY7O4b43X9pKFP1EDUtMDbdSy4wfmW9ql2xtbiy\n0fwmyznoo3PVoPS430weUpUX1cbFrDs7HYLFOsSKVe4e3+7uSCFfCwKLWuaiv4qr\n5VyDtGUuOSemY8xHFTjDUZ3lBVrv6i8hNiuB8KFJb5WMuIoj4Ei+A2rRGcrVcfCB\nTuXqoUSGccZDV/ez+YZozoXadOHmTY5JJjhDxJaUxOaXtffF71o2vIdEnUEXoXE+\neHW/22GHfDDhI+6ruQZQA4KK9lNstgKRueQQDSOg0vqzeGSIV+/ZgryyhSFulXfx\nHR6mvhxs04nziunJmA2xRfUWZU1+k14Xs/01vU0zdRlgyCtj/0kNaJ/60f5pqSV4\nkTn+th876geBn7TfLagBPXSQLQlFkCoN4cMlfycPTS5WMW+9XIpqEVCTuO8ONJGs\nfhH0W90YmNkf0EQqVaHW\n=8B7L\n-----END PGP SIGNATURE-----", + "payload": "tree 2a48e10db5ae481b1ea3a3b0f34635d791cdade6\nparent d83cb48b3a2059abec3cfb800a65aa5c013d2be0\nauthor Fedor Indutny 1478987380 -0500\ncommitter Anna Henningsen 1479792835 +0100\n\nprocess: add `process.memoryUsage.external`\n\nPR-URL: https://github.com/nodejs/node/pull/9587\nReviewed-By: Ben Noordhuis \nReviewed-By: Matteo Collina \nReviewed-By: Michaël Zasso \nReviewed-By: Johan Bergström \nReviewed-By: Colin Ihrig \nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/163397a206aecce0b18b304f73456a569bb06733", + "html_url": "https://github.com/nodejs/node/commit/163397a206aecce0b18b304f73456a569bb06733", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/163397a206aecce0b18b304f73456a569bb06733/comments", + "author": { + "login": "indutny", + "id": 238531, + "node_id": "MDQ6VXNlcjIzODUzMQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/238531?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indutny", + "html_url": "https://github.com/indutny", + "followers_url": "https://api.github.com/users/indutny/followers", + "following_url": "https://api.github.com/users/indutny/following{/other_user}", + "gists_url": "https://api.github.com/users/indutny/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indutny/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indutny/subscriptions", + "organizations_url": "https://api.github.com/users/indutny/orgs", + "repos_url": "https://api.github.com/users/indutny/repos", + "events_url": "https://api.github.com/users/indutny/events{/privacy}", + "received_events_url": "https://api.github.com/users/indutny/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "url": "https://api.github.com/repos/nodejs/node/commits/d83cb48b3a2059abec3cfb800a65aa5c013d2be0", + "html_url": "https://github.com/nodejs/node/commit/d83cb48b3a2059abec3cfb800a65aa5c013d2be0" + } + ] + }, + { + "sha": "f3db5e4720903f4dd719e7e087881ee2a9018e53", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZjNkYjVlNDcyMDkwM2Y0ZGQ3MTllN2UwODc4ODFlZTJhOTAxOGU1Mw==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-10T19:26:20Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:47Z" + }, + "message": "test: refactor test-zlib.js\n\n* minor layout changes for clarity\n* assert.equal() and assert.ok() swapped out for assert.strictEqual()\n* var -> const for modules included via require()\n\nPR-URL: https://github.com/nodejs/node/pull/9544\nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "0dd000fbdb213e92156ac58a0cbcad75065d487f", + "url": "https://api.github.com/repos/nodejs/node/git/trees/0dd000fbdb213e92156ac58a0cbcad75065d487f" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/f3db5e4720903f4dd719e7e087881ee2a9018e53", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9kzAAoJENi59a6uhOTP80MQAKnZ3mUZanN36TSLpFGsO9Q6\np0CswA1QxKDKtUt5dOKJRpzsnzXW3muAdaMYegMfruPwRR3CHFj3krEPgnkFj879\nGroNxYMSkYLnkTU9aNP9OKv0KFJPjg3gAJokt7bUfQPdxGu2wwFq++uDELU+jpyM\nuAEiZhlgn8vSyDpnLdavyEyZpnn1v666tY/amCVkvFs0vf2bXwCG/qyixYOr40P4\nW4HPbR9cEPttwhbB11+EA6HxpSNoLgZi0+OidwMLF7xbhsKBglhvTrfqI5UoRTFS\nI9sIKZC4dd9UASRSZ57SxDfG5XjYtoL7mYBLZSBaq1bScbEAUWjaAB6I1ibPDMcI\nDX+oZgT5zDkt7M9zwH/NIhDlBLFaOolTZp4HssCNvk+kHFM5Ns38wTS5PMMkrQeg\nE+uC95QFbvpm+QOFFpxUUo0FbUkqMC1Jy9X1JQFxPTZ/lek1Ooqo6C7AymjuAok9\nybxalYSJf/Rm/dTVi2/5gr36IAeMpYhdP9Ow9Y0gX8t026C94mQaLF7zLEk/8rvg\nSh1R5uGF52bkJyJz4nmZBe5qrxsSR3BYLKyx95pfHMhtF14qtvlnBAolXy/K1n+e\nvqPFkTkWl7zlJoBGRqD18AALnJko3dtRx/Fz40al39aDcgUbklayRmUM68/zJblD\nYRKLl0AcBntRdJnWeJyo\n=8VEe\n-----END PGP SIGNATURE-----", + "payload": "tree 0dd000fbdb213e92156ac58a0cbcad75065d487f\nparent 163397a206aecce0b18b304f73456a569bb06733\nauthor Rich Trott 1478805980 -0800\ncommitter Anna Henningsen 1479792947 +0100\n\ntest: refactor test-zlib.js\n\n* minor layout changes for clarity\n* assert.equal() and assert.ok() swapped out for assert.strictEqual()\n* var -> const for modules included via require()\n\nPR-URL: https://github.com/nodejs/node/pull/9544\nReviewed-By: Evan Lucas \nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/f3db5e4720903f4dd719e7e087881ee2a9018e53", + "html_url": "https://github.com/nodejs/node/commit/f3db5e4720903f4dd719e7e087881ee2a9018e53", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/f3db5e4720903f4dd719e7e087881ee2a9018e53/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "163397a206aecce0b18b304f73456a569bb06733", + "url": "https://api.github.com/repos/nodejs/node/commits/163397a206aecce0b18b304f73456a569bb06733", + "html_url": "https://github.com/nodejs/node/commit/163397a206aecce0b18b304f73456a569bb06733" + } + ] + }, + { + "sha": "00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MDBhNTQ5MGVjZDk0N2VhOGU2YWQ0YTAyYTUxZmVmODhiMjQ4MTc3YQ==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-11T20:57:18Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:47Z" + }, + "message": "test: increase coverage of process.emitWarning\n\nPreviously our tests did not check these codepaths as seen at\ncoverage.nodejs.org\n\nPR-URL: https://github.com/nodejs/node/pull/9556\nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "77f38597a01268a6f0296d496f8565dfbf4eaa39", + "url": "https://api.github.com/repos/nodejs/node/git/trees/77f38597a01268a6f0296d496f8565dfbf4eaa39" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9kzAAoJENi59a6uhOTPrVkP/j/sGrcYa3oozKrWoXI+oqq6\nmop0gIqxI9WI1i/SfssoUgesF8msm09dIVSKcye/SJ95cbWDbkXH1aL6uRb+ZQCZ\nmmlPSOaqjrk9UjTD+uDpwIEv5AeimpQ4DYv6DLp44TVT8h8c8ltm1KAWvWXNxrxb\nDcoZb5u17EPApLR9akUrfwoabqhi7XaKn3tVOX8obcgT5Vtj1kVBcil/y6Ogzb1R\nu5dn9ZYiuyipkgAWMQlxhehHONkoRDl6Rb+HNHdLeIJ06LO3TUc8/3x5GJs9E65U\n5VHjWBZ2mvJh0CqEwfqtn9eggQZ8ixPc1mDvaQj0vttADFIrYthAyXpcHJEWSK1k\nTnJz+bkKj77TU+G8D1Huz0xOpd/1yyjunvwtuMtYiAPyWPUIBtJsaOmJSCdZhpio\nrpHk9tJ1P2NwsFK3IdBJKQX+/9m0BfYBmKsHbpP5U0aHUbKmjJ6+kks8WD7MbCpF\nFD5xzvmNuL41desyLBOaHlXopqOyHTWGQM8jmdW9GN+mJGoP8tmV6vwaUtp9ACxg\nk0Lc0q2zEtRr6rL0iqpF/T8ZglHPLmcWoyUUyea/l8HAT7/iolopp8Dnaw1mSUBT\nk7nXQ61rEbdOCrylHA1N8s0WM8OStIGjIKouHwCsr6o4tRFHmJzsfVtamXwaP0Ik\ndGYLurZlM8ghDGVXKq9C\n=rxFp\n-----END PGP SIGNATURE-----", + "payload": "tree 77f38597a01268a6f0296d496f8565dfbf4eaa39\nparent f3db5e4720903f4dd719e7e087881ee2a9018e53\nauthor Jeremiah Senkpiel 1478897838 -0500\ncommitter Anna Henningsen 1479792947 +0100\n\ntest: increase coverage of process.emitWarning\n\nPreviously our tests did not check these codepaths as seen at\ncoverage.nodejs.org\n\nPR-URL: https://github.com/nodejs/node/pull/9556\nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "html_url": "https://github.com/nodejs/node/commit/00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/00a5490ecd947ea8e6ad4a02a51fef88b248177a/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "f3db5e4720903f4dd719e7e087881ee2a9018e53", + "url": "https://api.github.com/repos/nodejs/node/commits/f3db5e4720903f4dd719e7e087881ee2a9018e53", + "html_url": "https://github.com/nodejs/node/commit/f3db5e4720903f4dd719e7e087881ee2a9018e53" + } + ] + }, + { + "sha": "ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6Y2NjNmU3NWJlYTViM2Q2ZTEzMGYxODk3YTliMzcyM2Q5MTEyNGZhNg==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-11T20:28:18Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:48Z" + }, + "message": "test: ensure nextTick is not scheduled in exit\n\nPreviously our tests did not check this codepath as seen at\ncoverage.nodejs.org\n\nPR-URL: https://github.com/nodejs/node/pull/9555\nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Michaël Zasso ", + "tree": { + "sha": "7b6eef4cfc45f1c2f81f28e9e9e4f2ef0c6b6bd8", + "url": "https://api.github.com/repos/nodejs/node/git/trees/7b6eef4cfc45f1c2f81f28e9e9e4f2ef0c6b6bd8" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k0AAoJENi59a6uhOTPuh4QALIrG2KlbxA6KAII2pSv90xo\ncQHvaQXQVFLF67gm7tXSN8vfbbaHI81lzhFzGYPhs4jK6kjMpXw0YKbca6yxTxee\nhfqdNBBD/2cMWPFlvoTpZp7pOcmZxiBPysFqrNmd6HYssGyCcbquQOhf5sBvm0vM\ngE9v8BnMj/QvWNvC0wZJyhxkIpcFmGzkee4XDDVCEn2VpB3AFn9WkQ/3Fe0bQlVA\nrcUz6LH0Yp5M6eELEptjRd6IY4BDikbUZnEHrSRw1dLuOv641ardEw9uOJdsyvaT\nY5sF4g58me5O6A3054NEnrmTTmaMBiW9Rrk8cE1x3iUpmr89LSy+8+NJG2ZlZ5wM\nTvVK/YW3rYfHtw0088zu03/7sbhEflJC2YFxsUjOitf8g9qkEx3yGq1b9cmglcFm\nNrARh+BLMTEszVCfFoucCuvv01bXQ6MyNkDpcnEl1AwjswrMNBhxL6+WhXmJaG3/\n/69VF5i0oektJe02n+WS9LuxeHDqM32ditWW93SpksRtelU7NQXzElyVg52F3gkg\n+Z0HkorzCUGoP0BGrtC8eI2TM5NYcV2yqaXGnTjhwwZ1UquFS2hyys4xTa+cNoOn\nx5M501TJI53x+8aF8V0f/whBjifZdaLlL6A2C+DF6iM1fRESUI1XTgn7jwzLY8vv\nsudUb91wEGUVj4wNHDuH\n=9RwL\n-----END PGP SIGNATURE-----", + "payload": "tree 7b6eef4cfc45f1c2f81f28e9e9e4f2ef0c6b6bd8\nparent 00a5490ecd947ea8e6ad4a02a51fef88b248177a\nauthor Jeremiah Senkpiel 1478896098 -0500\ncommitter Anna Henningsen 1479792948 +0100\n\ntest: ensure nextTick is not scheduled in exit\n\nPreviously our tests did not check this codepath as seen at\ncoverage.nodejs.org\n\nPR-URL: https://github.com/nodejs/node/pull/9555\nReviewed-By: Colin Ihrig \nReviewed-By: Luigi Pinca \nReviewed-By: Michaël Zasso \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "html_url": "https://github.com/nodejs/node/commit/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "url": "https://api.github.com/repos/nodejs/node/commits/00a5490ecd947ea8e6ad4a02a51fef88b248177a", + "html_url": "https://github.com/nodejs/node/commit/00a5490ecd947ea8e6ad4a02a51fef88b248177a" + } + ] + }, + { + "sha": "65b60801ce1107bc3950a25d1317370fcee80ad0", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NjViNjA4MDFjZTExMDdiYzM5NTBhMjVkMTMxNzM3MGZjZWU4MGFkMA==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-08T21:07:16Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:48Z" + }, + "message": "tools: copy run-valgrind.py to tools/\n\nIt was a symbolic link to deps/v8/tools/run-valgrind.py before. We are\ngoing to make changes to it and we don't want to carry the patch forward\nso make a copy.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "3df026e82adbfce1e4d760233194bf978fee5753", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3df026e82adbfce1e4d760233194bf978fee5753" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/65b60801ce1107bc3950a25d1317370fcee80ad0", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k0AAoJENi59a6uhOTPTP8QAJfL+G3f501/clb+yn477NsK\ngdibKNmjVGHnUbnG/3Bgy00DRjGj6K6DdYH4rU3042lLoJ0Ic4sLMC+SPyvbNngG\nFJlULaxBh5MAyryVFVRE3+TTtLIGyw7wW3eZsNOAoqTfXR7HuJaaOSN5mjH2LES7\nDBBZpqW9lp1tryVCt4wENvSzR9X+FajXRY9I7yaVHUKMWvfXpvwPPZt596fgq87h\nghALFkHh1ftv5i2qW4QaU/N0lLPr6C+M4kbxRT+RXqhZtnuWgcQfuqv+5TQvOIvD\nNxFSE/BhjCUCIvnItb8YOGZkXtrkGDauCAKIEHNRRHirh8CwDkKzK1CfqQhYEoTM\np1g7c3phh7pyWFzcy2mdPtvLXCDLBUt18r5qH1g8Y8MxeIkjNBDZPB2vxpDGszCw\n6fHa5DCuxXHGcxaVW8ewFQt9VameQtdoG7OjMgGJHXAktDLeoqNjnh8NwGEPAkcd\ndHwNeWFShXJtPsGv2X62yIs4koCDNTOOBS92TUe+xzM/V2/lZnqS2uiAs+7OcQ5R\nEKYXjNb4W8m8wIMVf/gyZ3kG032QL4U0zFybk8JlWHn/6B0a28NkbLjtbN4DK00V\nf1dRaFhg3uKk9zBDdPy0FJ3XLqtxLgA2C1+RKe9ofCq3aohLpK1xBTjlJiZ5Id/d\n3U5WV/7lgqqphmEHdKvI\n=CcQD\n-----END PGP SIGNATURE-----", + "payload": "tree 3df026e82adbfce1e4d760233194bf978fee5753\nparent ccc6e75bea5b3d6e130f1897a9b3723d91124fa6\nauthor Ben Noordhuis 1478639236 +0100\ncommitter Anna Henningsen 1479792948 +0100\n\ntools: copy run-valgrind.py to tools/\n\nIt was a symbolic link to deps/v8/tools/run-valgrind.py before. We are\ngoing to make changes to it and we don't want to carry the patch forward\nso make a copy.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/65b60801ce1107bc3950a25d1317370fcee80ad0", + "html_url": "https://github.com/nodejs/node/commit/65b60801ce1107bc3950a25d1317370fcee80ad0", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/65b60801ce1107bc3950a25d1317370fcee80ad0/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "url": "https://api.github.com/repos/nodejs/node/commits/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6", + "html_url": "https://github.com/nodejs/node/commit/ccc6e75bea5b3d6e130f1897a9b3723d91124fa6" + } + ] + }, + { + "sha": "887c76a664d97695abbef39846a2491a73fd8fee", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODg3Yzc2YTY2NGQ5NzY5NWFiYmVmMzk4NDZhMjQ5MWE3M2ZkOGZlZQ==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-08T21:07:17Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:49Z" + }, + "message": "tools: fix run-valgrind.py script\n\nThe script had a dependency on the copy of valgrind that is bundled\nwith V8 but that only gets checked out when doing a full depot_tools\ncheckout. Use the system-provided valgrind.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "c4ff10addc9f486358006e19833df64f903af1f8", + "url": "https://api.github.com/repos/nodejs/node/git/trees/c4ff10addc9f486358006e19833df64f903af1f8" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/887c76a664d97695abbef39846a2491a73fd8fee", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k1AAoJENi59a6uhOTPOKkQAKUGpl8aTEY8Up4l1PszEfP0\nJhpL6hqRbxs9XKkJOzdVkKVdDRX9fSE5S8Hw8cjbdII5WBuME0ZiH6doXfXR5VJK\n3ykUQYbfjoDelOWUQKdpNmGnMFgp+XILL9uaQKnEiQ9YDeG5rpKuGlnUuEzMnz1/\n0bKs3E0LPgzQGtxvOb3XV/FpaajgT+t+P7CBw7xmpBJ9WXL7SUoOkYYafcyykvD+\nEbqTEWUlRTNUUCTbwpGTUGM2MBb+AuBfO8QWnhDNoCXeC0XiAcorW6/4jOOG2ARf\nVhj/wd40EOuOSSsLmWXG/m9m/+ukr7g5UMQ/lAHyGl3ZTwo7Y5wLlevk4aQJRszp\nkP0u2EFOaQZJoVFjl2nI4lRb7FYr9zR15u94NTVTxEpvKOy8B6OOOhIYa2dmsscm\nDBAyJv86SyNDceEIKJaZAqsQWdXUAjyLQK9zo+1SVTV76GbOPKF9jC/IqhAdohKz\nt9FHSUQ0RdTevMos6N8zE2nk4MSdwmuNdc/0K7Q9qf+QJOxM/HPmdPp1p1TyJvG/\nLqCoPvWIl0BDiwaA0g8F+XpIP+LeMTDNylGtgkhIq0Tpx3DuENjk+rfQfnMMcBKo\nc7WaM8boExMFDgFMTy36ApjGnlEp2BUTirW9m61RfnsM2/vvZtSveTm7yTy+RS5d\n2avK/1+/0R2zjiVJUAB9\n=KdhF\n-----END PGP SIGNATURE-----", + "payload": "tree c4ff10addc9f486358006e19833df64f903af1f8\nparent 65b60801ce1107bc3950a25d1317370fcee80ad0\nauthor Ben Noordhuis 1478639237 +0100\ncommitter Anna Henningsen 1479792949 +0100\n\ntools: fix run-valgrind.py script\n\nThe script had a dependency on the copy of valgrind that is bundled\nwith V8 but that only gets checked out when doing a full depot_tools\ncheckout. Use the system-provided valgrind.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/887c76a664d97695abbef39846a2491a73fd8fee", + "html_url": "https://github.com/nodejs/node/commit/887c76a664d97695abbef39846a2491a73fd8fee", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/887c76a664d97695abbef39846a2491a73fd8fee/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "65b60801ce1107bc3950a25d1317370fcee80ad0", + "url": "https://api.github.com/repos/nodejs/node/commits/65b60801ce1107bc3950a25d1317370fcee80ad0", + "html_url": "https://github.com/nodejs/node/commit/65b60801ce1107bc3950a25d1317370fcee80ad0" + } + ] + }, + { + "sha": "deabb5cfaac407a601175af9a6b841ecab93f9b3", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZGVhYmI1Y2ZhYWM0MDdhNjAxMTc1YWY5YTZiODQxZWNhYjkzZjliMw==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-08T21:07:34Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:49Z" + }, + "message": "tools: make run-valgrind.py useful\n\nNode.js does not clean up on exit so don't complain about memory leaks\nbut do complain about invalid memory access. In the future we may want\nto add a cleanup-on-exit flag or put together a suppression list.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "16bc432761052c764e9d4a5d18b4f1ec8d835e5d", + "url": "https://api.github.com/repos/nodejs/node/git/trees/16bc432761052c764e9d4a5d18b4f1ec8d835e5d" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/deabb5cfaac407a601175af9a6b841ecab93f9b3", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k1AAoJENi59a6uhOTPf5IQAJx4/Nt19K2ZKdRN+b+/3Urd\nNeVKblATZGC5XbKjwOCWMbpHlTgKlu8ymsO3x65Wj2GjswG1LEm0j0EIEtKBHvyA\ny2aFIChf2xQxoQp4HM8u/6A9zmnABcm4jmg6rKi4IZehuBetu7Esah/bLiIogfv7\nQmkKGuoikAuK6saNQ7vn1eytSD1xF9tu4RMcmJtLXZKGrsIShOllPzptAU/WcgRi\nNMihonrzGkVVGoZAW8ejCdUERQ3ePO+x+DdX45dJzE+Xseeofidi45nGlhZTF7WS\nui1WwGbrLskX3HrUsC+Kz9YtttvtInx1v4LmTY61xf59nDId9Ft+oGxb6053nSHE\nwVWgPbWtBnzWi4WfxHixm97frLjHxCAF26gjHbxSJYkKsgsTJTPZQki8JPGuzj/T\nZCZi1z3Mrp4ZultkSUdOMD6h28UDpZXd8R6ZI0NYjXKs48wwKbEqENoUje2wNoXV\nVczo2mYNER+dhUN0l6YxPaRXgy0nyn3LI2PsZIYlSHB0GDyo80t3XRNzLhq9/4ey\n/3X7YrBtQvz1Bz5ET8uIl93h6gV7zzYhT9Uh8GWtejpgZk7f+fyaKyXWuzg/U/cO\n6E2mUmQW6xkIP/ke3Xs52BuJKIWzoXluCBSOMPboMj+wHql5E64l2zTSBVT6yh2G\ntKvmukGYmAfRAOi576j6\n=ZNhC\n-----END PGP SIGNATURE-----", + "payload": "tree 16bc432761052c764e9d4a5d18b4f1ec8d835e5d\nparent 887c76a664d97695abbef39846a2491a73fd8fee\nauthor Ben Noordhuis 1478639254 +0100\ncommitter Anna Henningsen 1479792949 +0100\n\ntools: make run-valgrind.py useful\n\nNode.js does not clean up on exit so don't complain about memory leaks\nbut do complain about invalid memory access. In the future we may want\nto add a cleanup-on-exit flag or put together a suppression list.\n\nPR-URL: https://github.com/nodejs/node/pull/9520\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Anna Henningsen \nReviewed-By: Michael Dawson \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/deabb5cfaac407a601175af9a6b841ecab93f9b3", + "html_url": "https://github.com/nodejs/node/commit/deabb5cfaac407a601175af9a6b841ecab93f9b3", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/deabb5cfaac407a601175af9a6b841ecab93f9b3/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "887c76a664d97695abbef39846a2491a73fd8fee", + "url": "https://api.github.com/repos/nodejs/node/commits/887c76a664d97695abbef39846a2491a73fd8fee", + "html_url": "https://github.com/nodejs/node/commit/887c76a664d97695abbef39846a2491a73fd8fee" + } + ] + }, + { + "sha": "bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YmZmNGU4OGYwYjcxMjI3ZmQ4ZjA4NDQyY2ZhMjJkNzdkY2FiMDdkNA==", + "commit": { + "author": { + "name": "Vse Mozhet Byt", + "email": "vsemozhetbyt@gmail.com", + "date": "2016-11-13T23:50:08Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:50Z" + }, + "message": "doc: fix a typo in the assert.md\n\nPR-URL: https://github.com/nodejs/node/pull/9598\nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "1af3aae0512143af3e2f64226e57b9b68206e229", + "url": "https://api.github.com/repos/nodejs/node/git/trees/1af3aae0512143af3e2f64226e57b9b68206e229" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k2AAoJENi59a6uhOTPsSkQAIF31zBt3sFuxRp5kpw0VWLH\nHHtUpdmrj0BYH0wpq5VDShO3bP29qvAdYPMH3DkOHgBjJI2QdOqnvog4pUAuXX9w\nLl0dwEVoDHWOzqGNEBh2OYHXe7RdqP+Mjq7conLBjlfDiqkssUCNlbCGQZZLNT3T\nN0w9NfeXU2EcfZxpf6FFKLD1R6GV5MmOkyLeiC1C9UggT0Ni5FUcqhmPvzL0bxL0\n6NzhvcwDnr6v7vbCT6hBTuWDkwQ4lCGZFR35n8uJ0ppq9Hyo/HZ1VgEI0S/oXZxd\nlUUJ5zOAGRJtpOia4XFFVVrBMfbbM9cfvydwd3WBVMQRHulBJTnZYBEwFnbyxN3b\nVpzKyZlJ2+i5FTQs+yfyaeZ0axTMH/wswSB3C/fopvpVzgwuAYtO0bLyie3lssGS\ndbn/9+FB0nhMesWKamPRPmT/bQ5Ocni0bv8Wghw8/0ZegGKiqT2TQqtIwKA/bD3L\n9ID/M/6mc7L4uuBd6JSFd9x3R7zSI59utl3DBVnOErzdbOVy2VeDw3unf6PRYJ8g\n3pog6HsDkjyelPs8SocaIU5KyCXXlh1GBBqJ26vo6w3t9FvAwhd4R47/ixxgGShA\n/gbZi+haQKqNPmCiGRAIAS5NW9wT3m+MdpcMRV0TO8pFFzYNnwI7rWYdziNRL0hx\nNsyUtJombJjfKuLyZObl\n=XSKC\n-----END PGP SIGNATURE-----", + "payload": "tree 1af3aae0512143af3e2f64226e57b9b68206e229\nparent deabb5cfaac407a601175af9a6b841ecab93f9b3\nauthor Vse Mozhet Byt 1479081008 +0200\ncommitter Anna Henningsen 1479792950 +0100\n\ndoc: fix a typo in the assert.md\n\nPR-URL: https://github.com/nodejs/node/pull/9598\nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "html_url": "https://github.com/nodejs/node/commit/bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/bff4e88f0b71227fd8f08442cfa22d77dcab07d4/comments", + "author": { + "login": "vsemozhetbyt", + "id": 10393198, + "node_id": "MDQ6VXNlcjEwMzkzMTk4", + "avatar_url": "https://avatars.githubusercontent.com/u/10393198?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vsemozhetbyt", + "html_url": "https://github.com/vsemozhetbyt", + "followers_url": "https://api.github.com/users/vsemozhetbyt/followers", + "following_url": "https://api.github.com/users/vsemozhetbyt/following{/other_user}", + "gists_url": "https://api.github.com/users/vsemozhetbyt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vsemozhetbyt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vsemozhetbyt/subscriptions", + "organizations_url": "https://api.github.com/users/vsemozhetbyt/orgs", + "repos_url": "https://api.github.com/users/vsemozhetbyt/repos", + "events_url": "https://api.github.com/users/vsemozhetbyt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vsemozhetbyt/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "deabb5cfaac407a601175af9a6b841ecab93f9b3", + "url": "https://api.github.com/repos/nodejs/node/commits/deabb5cfaac407a601175af9a6b841ecab93f9b3", + "html_url": "https://github.com/nodejs/node/commit/deabb5cfaac407a601175af9a6b841ecab93f9b3" + } + ] + }, + { + "sha": "34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzRjOGIwYjQxMWI1ODhkYjk5ZWJhMGJmZGVkYWQxZDc2NDlmN2E0Yw==", + "commit": { + "author": { + "name": "Kelvin Jin", + "email": "kelvinjin@google.com", + "date": "2016-10-01T00:24:03Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:50Z" + }, + "message": "module: check -e flag in debug break setup\n\nWhen both --debug-brk and --eval are set, and a filename is\nspecified, its full path is not set correctly, causing an error\nfor relative filenames with './' omitted.\n\nFor example, 'node --debug-brk -e 0 hello.js' throws an error.\n\nSince the script referenced by the filename is never run anyway,\nthis change skips resolving its full path if both --debug-brk and\n--eval are set.\n\nPR-URL: https://github.com/nodejs/node/pull/8876\nReviewed-By: Ben Noordhuis \nReviewed-By: James M Snell ", + "tree": { + "sha": "fb1a8f4989d27b3142eb7254f64d2cbab670d13b", + "url": "https://api.github.com/repos/nodejs/node/git/trees/fb1a8f4989d27b3142eb7254f64d2cbab670d13b" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k2AAoJENi59a6uhOTPaKoP/jYYdEZruvmFrU7jNZNGA7+Y\nOzF9pGlj6+mZw3YY65UUHN+oH7vu9HV2hbxhqMbB98qLpUmX11yIeVs2j0WDpjsW\n6LZpW/qM4pOvLGOfJay3JoutZpm77ULUZffgw1OzJGmE5bUj40vyc4EKpGlukOAV\nIUaBe3nfDaGLtKWYGNKtC42DcPE5Bu6bU9CDLnhS0+l0VTjBns3i24CisqhqTHtp\ncpdL5U3xS7shD+5DsXCG2WuvhxHp0w3tSdFOwBFfIf/n/GMN5JCaHEuaUU8YtHXk\nYShVH2LWUEoPVLSd+HI959+KGrmLK01kuzr3XHk18HJqbj/sMS0zJeXeowrcus2Y\npkjmVeULI+2am5q/9gtOsVwEuSlVecol6jbr8z4H1WmQFaPO6c6FeUtBu5+2aUEe\n1+G4r8aqLNwepeQdWJsIfmN+yTiQyyqk3EbS457dj3Z+ATGOlJX2uMtnUNX2DCig\nCTt26MHpyETMcrb+4gopRW2huoepVap0b1X+rYpy9qD7r5CpuzwQ7y3lK7eokKsG\nG0SHVB3fKzkK/GDUK0paaUCS2tqauynEg1kfchSU2fAO/oDBH2mpldY53ZoSn9Ba\n+35hfVC1aJyLeMiEmC9m39maQLFVu12Di2yxaVPp6aIX00sDWjoXn6H+CkcZeA/1\nQA366Z90glM5MPIvaxVD\n=oZMj\n-----END PGP SIGNATURE-----", + "payload": "tree fb1a8f4989d27b3142eb7254f64d2cbab670d13b\nparent bff4e88f0b71227fd8f08442cfa22d77dcab07d4\nauthor Kelvin Jin 1475281443 -0700\ncommitter Anna Henningsen 1479792950 +0100\n\nmodule: check -e flag in debug break setup\n\nWhen both --debug-brk and --eval are set, and a filename is\nspecified, its full path is not set correctly, causing an error\nfor relative filenames with './' omitted.\n\nFor example, 'node --debug-brk -e 0 hello.js' throws an error.\n\nSince the script referenced by the filename is never run anyway,\nthis change skips resolving its full path if both --debug-brk and\n--eval are set.\n\nPR-URL: https://github.com/nodejs/node/pull/8876\nReviewed-By: Ben Noordhuis \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "html_url": "https://github.com/nodejs/node/commit/34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/34c8b0b411b588db99eba0bfdedad1d7649f7a4c/comments", + "author": { + "login": "kjin", + "id": 2365820, + "node_id": "MDQ6VXNlcjIzNjU4MjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/2365820?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kjin", + "html_url": "https://github.com/kjin", + "followers_url": "https://api.github.com/users/kjin/followers", + "following_url": "https://api.github.com/users/kjin/following{/other_user}", + "gists_url": "https://api.github.com/users/kjin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kjin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kjin/subscriptions", + "organizations_url": "https://api.github.com/users/kjin/orgs", + "repos_url": "https://api.github.com/users/kjin/repos", + "events_url": "https://api.github.com/users/kjin/events{/privacy}", + "received_events_url": "https://api.github.com/users/kjin/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "url": "https://api.github.com/repos/nodejs/node/commits/bff4e88f0b71227fd8f08442cfa22d77dcab07d4", + "html_url": "https://github.com/nodejs/node/commit/bff4e88f0b71227fd8f08442cfa22d77dcab07d4" + } + ] + }, + { + "sha": "89216a45b73fb325f91a81c20ad3c23be5ac2157", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODkyMTZhNDViNzNmYjMyNWY5MWE4MWMyMGFkM2MyM2JlNWFjMjE1Nw==", + "commit": { + "author": { + "name": "Timothy Gu", + "email": "timothygu99@gmail.com", + "date": "2016-11-12T18:17:20Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:51Z" + }, + "message": "doc: fix type of http.request's `agent` option\n\nPR-URL: https://github.com/nodejs/node/pull/9584\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "3fc3127389ec8d50ef7d4d22dbd3ea46e0f6758a", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3fc3127389ec8d50ef7d4d22dbd3ea46e0f6758a" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/89216a45b73fb325f91a81c20ad3c23be5ac2157", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k3AAoJENi59a6uhOTP2QIP/Ai9clmYgYdzZT5CEwNKkADq\npI0IOOtqRli0a3VxNkm0te1IgsuDtBHPijeCKoSor7Ssn0nljgYXh4uk9oR4G7sT\nBPNJQcugNTKTIdGYLup5i3RLEHazsSzWbeqT27akiRnLiDMWwqXUr6zlIRcmm/45\nfKpHUvWetbWBPEqlqLgAYlQFwAwiA/VQHOIWCeopsAQe5IQBJ27XBiRfAQMFZXqQ\nPcCgHPVCURbOcZmu02HHIpv1EECWgEnohYQfDwQp7LaalKBqF28dm6xyIrqW0DJv\nwSVimcfQJ7U4CtgmE2G9xsrg914bAvRyRzJ6/K6r3/GKlZAdrGGTWgi6Z0NnsCf3\nTyouNWNUcYSmcrOxqah314h09YEyuv8zjfYyD7Zgi928R3V6Z7fNbtedjsysHNYw\n0fVgUkam6u7/N15dtiyOifRdH3XwynPItyIiXlr+7MrlVhJ6vpAnBcbEdQGCZn5S\nMXnVA7onO8jpvF67bEaYQ7CiaVaXEHSkh6hS8cb6H4hlxJhOTVsgc0kATZKoD4FU\n5cL0llp3IPmNHphUy6XspcE+DZ5mEUXZ1JlqVUBRdnNyna6h+RInN8+roRcquk90\nZxgdgAjTJXZ/eI7nOlIKhC1nskB1tOW8J0Kdvcs6oZAcM8MAJ/D8NsWpCmvEqRv+\njXpZmbf2pCjfM20TZqvM\n=QoUc\n-----END PGP SIGNATURE-----", + "payload": "tree 3fc3127389ec8d50ef7d4d22dbd3ea46e0f6758a\nparent 34c8b0b411b588db99eba0bfdedad1d7649f7a4c\nauthor Timothy Gu 1478974640 -0800\ncommitter Anna Henningsen 1479792951 +0100\n\ndoc: fix type of http.request's `agent` option\n\nPR-URL: https://github.com/nodejs/node/pull/9584\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/89216a45b73fb325f91a81c20ad3c23be5ac2157", + "html_url": "https://github.com/nodejs/node/commit/89216a45b73fb325f91a81c20ad3c23be5ac2157", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/89216a45b73fb325f91a81c20ad3c23be5ac2157/comments", + "author": { + "login": "TimothyGu", + "id": 1538624, + "node_id": "MDQ6VXNlcjE1Mzg2MjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/1538624?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/TimothyGu", + "html_url": "https://github.com/TimothyGu", + "followers_url": "https://api.github.com/users/TimothyGu/followers", + "following_url": "https://api.github.com/users/TimothyGu/following{/other_user}", + "gists_url": "https://api.github.com/users/TimothyGu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TimothyGu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TimothyGu/subscriptions", + "organizations_url": "https://api.github.com/users/TimothyGu/orgs", + "repos_url": "https://api.github.com/users/TimothyGu/repos", + "events_url": "https://api.github.com/users/TimothyGu/events{/privacy}", + "received_events_url": "https://api.github.com/users/TimothyGu/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "url": "https://api.github.com/repos/nodejs/node/commits/34c8b0b411b588db99eba0bfdedad1d7649f7a4c", + "html_url": "https://github.com/nodejs/node/commit/34c8b0b411b588db99eba0bfdedad1d7649f7a4c" + } + ] + }, + { + "sha": "3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzAxNGRmZDI1NDc0ZTJiOWYyOTkxZGFiNmE5ZThjYzc2Njk3MThjYg==", + "commit": { + "author": { + "name": "Timothy Gu", + "email": "timothygu99@gmail.com", + "date": "2016-11-13T14:43:55Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:51Z" + }, + "message": "doc: wrap long lines in http.request\n\nPR-URL: https://github.com/nodejs/node/pull/9584\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "4f9db1e0f9e241f402ed826949bf43878d68db7c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/4f9db1e0f9e241f402ed826949bf43878d68db7c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k4AAoJENi59a6uhOTPjZQP/0m851Fmmsj+cMC9eX+veBx5\n3yiQlQXatzEHBVqE3ycM96f+E1ywiLvNuVYufZaIbJuESmdc/BrOMB514y8MQaWs\nD82WnjXacFkSza1Hz8nyqepdyl4f16e4JO+qqaq4H7Zkvr6WRDh+wRdOgSh63AW6\nD8lJmvjDFdcWka2b7gJgKR348+ubg/ZJ2ZkD8n/v/8pZRBhQgmju5rh4H5XhL+HU\n2ZqdGpsaA8hHuehLfMnkE5j2WNLTxcaX7jdihw6uac63m63EkbkPLLUwi2xC6rvg\nZAl6a0n3u6mtqPfD0xNDTi0KEEoXZ76pd655WOVkYDLWZqkJoqJQW2s8XX3kvSpw\nGxK+qAnZF68gf1Wtd5YEBgsGsfitOA0xWCEwECFmn4aSOxHRftXXXr/A8cuNNHDX\nD+ft91SQZTDN8EAfKXAPnBnpqwnCEBxsEB4Mjh0JsOuueFfrZxwxMmNkBKGVfq7K\nNzh4UP0/ftVJtS1m2rYVN4Bc/XZ3208rF0JA0+Ca2um1C+21MqnJuBdzqoLmA+fr\nRkE9cxYo88cVtVAvOqdOJjNwgvO2DbacQKvli23GxWpwbtOzKXbbZCFbJU38+En7\nm9iHHntYPv58jEgvUE6xKphw3rnXjibb31kttuDGrWCY0ih20J2Xp3TmyQ0nQtWJ\nY9zbMQvg9rGNbxQkLA7S\n=mu08\n-----END PGP SIGNATURE-----", + "payload": "tree 4f9db1e0f9e241f402ed826949bf43878d68db7c\nparent 89216a45b73fb325f91a81c20ad3c23be5ac2157\nauthor Timothy Gu 1479048235 -0800\ncommitter Anna Henningsen 1479792951 +0100\n\ndoc: wrap long lines in http.request\n\nPR-URL: https://github.com/nodejs/node/pull/9584\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "html_url": "https://github.com/nodejs/node/commit/3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/3014dfd25474e2b9f2991dab6a9e8cc7669718cb/comments", + "author": { + "login": "TimothyGu", + "id": 1538624, + "node_id": "MDQ6VXNlcjE1Mzg2MjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/1538624?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/TimothyGu", + "html_url": "https://github.com/TimothyGu", + "followers_url": "https://api.github.com/users/TimothyGu/followers", + "following_url": "https://api.github.com/users/TimothyGu/following{/other_user}", + "gists_url": "https://api.github.com/users/TimothyGu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TimothyGu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TimothyGu/subscriptions", + "organizations_url": "https://api.github.com/users/TimothyGu/orgs", + "repos_url": "https://api.github.com/users/TimothyGu/repos", + "events_url": "https://api.github.com/users/TimothyGu/events{/privacy}", + "received_events_url": "https://api.github.com/users/TimothyGu/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "89216a45b73fb325f91a81c20ad3c23be5ac2157", + "url": "https://api.github.com/repos/nodejs/node/commits/89216a45b73fb325f91a81c20ad3c23be5ac2157", + "html_url": "https://github.com/nodejs/node/commit/89216a45b73fb325f91a81c20ad3c23be5ac2157" + } + ] + }, + { + "sha": "d5fa1d530721461e9bec0577d80c2a8957193103", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDVmYTFkNTMwNzIxNDYxZTliZWMwNTc3ZDgwYzJhODk1NzE5MzEwMw==", + "commit": { + "author": { + "name": "Nikolai Vavilov", + "email": "vvnicholas@gmail.com", + "date": "2016-10-27T17:49:21Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:52Z" + }, + "message": "doc: clarify eventType in fs.watch\n\n'rename' is confusing, and it's not clear what \"they\" refers to.\n\nFixes: https://github.com/nodejs/node/issues/9082\nPR-URL: https://github.com/nodejs/node/pull/9318\nReviewed-By: Rich Trott \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "723bd784c06f24adb33a7983fb20a36f528736f6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/723bd784c06f24adb33a7983fb20a36f528736f6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d5fa1d530721461e9bec0577d80c2a8957193103", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k4AAoJENi59a6uhOTPCHoQAKIU8NIjhj3ds9i2rNbHolu0\nfOwjmzI1CeZcx3VzWFpE56+jQFQ/Q7vUgeIxCuDUtXAQPFEbmLmyyZoEGJXT7xE9\nsu6BfU/zS6r6+1ZCtk8QY1jfNlmIfzAtuI8E2VUftNcSbO07ByvnAOaAvuFEF/ux\nYK/8S6wKOSxbdVYpY09vqDyqoxJGUmIwJwriTDH6QyvHtnPIn+9rVBnQMJvupHHe\nhbpiaMaWee+IzJYXRZ4Jzlr3bDkz5bcJS+WxNZeLlJxpfs2kv60Npvj0gKagXl9Y\neXBD1FzlQoBB5OwmQsW6/SOc46/zodJXoHNLP/53hs7v0tcoeGJPi9f+h9gv3n6G\nOUdvuKz9eDPNx9XCfnheAogLQEFW9hrbIBWHt1dWBssF1m0oYr928DxJ8OqqLEyG\nrczvF1mmfVZP2YQaVTnKqzOTUi4tmAOnx8/V3Zl9FJLCJ+0bCKa5WL9CcFJzXbNd\niCDmbtRNR6tfjgyk+TS9juus5kBBQZ364jRGMtN9pDtz0aDqapdyOYLgC+S6yA9i\nVMxOd5IYk89uYQxvFK1wWqX1+YgeVuyQitRO7xsvVku9+ih1DxZ6x99Yc1boWp8U\nX6G2VXvCRimJog8Jkmghp1WtTjbM7CsZwuZL3wB33rl1z5eTCNS6ZXNHLNy+Mc+E\n7ikExCyum90Jg4Voxypn\n=0LAO\n-----END PGP SIGNATURE-----", + "payload": "tree 723bd784c06f24adb33a7983fb20a36f528736f6\nparent 3014dfd25474e2b9f2991dab6a9e8cc7669718cb\nauthor Nikolai Vavilov 1477590561 +0300\ncommitter Anna Henningsen 1479792952 +0100\n\ndoc: clarify eventType in fs.watch\n\n'rename' is confusing, and it's not clear what \"they\" refers to.\n\nFixes: https://github.com/nodejs/node/issues/9082\nPR-URL: https://github.com/nodejs/node/pull/9318\nReviewed-By: Rich Trott \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d5fa1d530721461e9bec0577d80c2a8957193103", + "html_url": "https://github.com/nodejs/node/commit/d5fa1d530721461e9bec0577d80c2a8957193103", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d5fa1d530721461e9bec0577d80c2a8957193103/comments", + "author": { + "login": "seishun", + "id": 988441, + "node_id": "MDQ6VXNlcjk4ODQ0MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/988441?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/seishun", + "html_url": "https://github.com/seishun", + "followers_url": "https://api.github.com/users/seishun/followers", + "following_url": "https://api.github.com/users/seishun/following{/other_user}", + "gists_url": "https://api.github.com/users/seishun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/seishun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/seishun/subscriptions", + "organizations_url": "https://api.github.com/users/seishun/orgs", + "repos_url": "https://api.github.com/users/seishun/repos", + "events_url": "https://api.github.com/users/seishun/events{/privacy}", + "received_events_url": "https://api.github.com/users/seishun/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "url": "https://api.github.com/repos/nodejs/node/commits/3014dfd25474e2b9f2991dab6a9e8cc7669718cb", + "html_url": "https://github.com/nodejs/node/commit/3014dfd25474e2b9f2991dab6a9e8cc7669718cb" + } + ] + }, + { + "sha": "3b4ec5f6c584e49ca6cf6c618191daff44247806", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6M2I0ZWM1ZjZjNTg0ZTQ5Y2E2Y2Y2YzYxODE5MWRhZmY0NDI0NzgwNg==", + "commit": { + "author": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-10-21T20:57:17Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:53Z" + }, + "message": "test: check that `process.execPath` is a realpath\n\nThis test is only here to ensure consistent cross-platform behaviour.\n\nPR-URL: https://github.com/nodejs/node/pull/9229\nReviewed-By: Evan Lucas \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "968608b3f1a7be0db628418eae6fac4fda013a37", + "url": "https://api.github.com/repos/nodejs/node/git/trees/968608b3f1a7be0db628418eae6fac4fda013a37" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/3b4ec5f6c584e49ca6cf6c618191daff44247806", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k5AAoJENi59a6uhOTPOIsP/RnCQ78F1JxWR032Nbp82PYE\n0R4c8cGf4jxwbH3HVGN6GzzXPzKS3jDZ/bKPzdvbQ6d86gL+ZWf+4AWXRAF/Pl0X\nRTGXUklDVj50J3j28OKrT0RekW+SH6Pf4W5NQ+3UEFp/DJmaTQ8kKJ2hz8p9iyf3\nn+ONqsDQZtQ/2fBa0pWYtCx61P+F+edr7yod2OtI+6EeCS0hxhyQYRv84E5jTdHp\nhetxvNCmoocgqcihQVdbJAB185SkYRsrMDiJ2PICCnG1qfh/Logkc+izN7zl+fyU\nan4mmGwo9NZ8rYmxUpwNuu2vlsRN8akfcZJnxwDMLtw6cTmWOWOqZQtlWVQkgEJY\n8esAzfki5R79uXX98QhY/oWZPNaIZSOYnroeOveT6QM1DDFr50xtcEgo0TKJ+1l9\nADWvXjoJADZn/B2PB0CdGvCAXkHQh1TgunCerCTaUP/iTR3JLe0EMw1t7++qlRg5\niNZnQiZ6JxL2dUudtjb9zAprFr68tHS/rc+7lMBNT0ceb95uC0uQsnCvRD5Qy0Vn\n29rO3fLAF4p/Wss4I67d6+u+EAUu4Q5/NRJ1bn3eL0Kh6l6kE38cCBZcyHXZ2wQu\nFP2rBYNyByqVrTrLO/k1SLDLNhPskidfp/FOqq89eZ7s+9mjjF7ma7EtQPGUdOBh\n5lmU2voAOJCMXRi/b5uX\n=geeN\n-----END PGP SIGNATURE-----", + "payload": "tree 968608b3f1a7be0db628418eae6fac4fda013a37\nparent d5fa1d530721461e9bec0577d80c2a8957193103\nauthor Anna Henningsen 1477083437 +0200\ncommitter Anna Henningsen 1479792953 +0100\n\ntest: check that `process.execPath` is a realpath\n\nThis test is only here to ensure consistent cross-platform behaviour.\n\nPR-URL: https://github.com/nodejs/node/pull/9229\nReviewed-By: Evan Lucas \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/3b4ec5f6c584e49ca6cf6c618191daff44247806", + "html_url": "https://github.com/nodejs/node/commit/3b4ec5f6c584e49ca6cf6c618191daff44247806", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/3b4ec5f6c584e49ca6cf6c618191daff44247806/comments", + "author": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d5fa1d530721461e9bec0577d80c2a8957193103", + "url": "https://api.github.com/repos/nodejs/node/commits/d5fa1d530721461e9bec0577d80c2a8957193103", + "html_url": "https://github.com/nodejs/node/commit/d5fa1d530721461e9bec0577d80c2a8957193103" + } + ] + }, + { + "sha": "25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MjVhNmY4OGQ5OGQ3MzJmNjk1NjJiZjk1YzM5YmY2ZDczZTM1ZTQ4ZA==", + "commit": { + "author": { + "name": "Brian White", + "email": "mscdex@mscdex.net", + "date": "2016-11-13T04:34:35Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:53Z" + }, + "message": "doc: improve process.emitWarning() example\n\nPR-URL: https://github.com/nodejs/node/pull/9590\nReviewed-By: Roman Reiss \nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "bcedf1f5ea1114480c3f81bfd288842d9d36df0d", + "url": "https://api.github.com/repos/nodejs/node/git/trees/bcedf1f5ea1114480c3f81bfd288842d9d36df0d" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k5AAoJENi59a6uhOTPjVwQAIQHNQmnCLTnWipHjgZ+blgo\ncYUG++b0faYi96zHF4KuOV7S0un/kzJ3VpNSBzHN01rOWLXCbr4VU6XAxLpLBFDs\nqSI1GbWmUx0JM8LbBqCwZiTRgW22S9YwACgHnnLeuwj+toq1IDuvcJ38otTy4qjp\nhiEROcYm6YpJz/WWYxp17f2Ow23zSZcgU7O165WPZptoQdQ8wMmiCwZ38FslLONS\n3gK52/4zIYnUmbnWr0e+ZDlUpfE3DQxBaPu5v1ua91mlaD+gubq2BOYNxiC+bvFd\n0KMnRuIZj+nhtpn/uI7AT5oHgXQm14oJCuaISG7ehil7H36aCKPJEyFB4Fuw1PRs\naekEDR+cQJo2Z5RjBQLnsJDmTAA8P2iLDTi/W0wyIo55p7d7o5y46COjnXN9Hu4j\nZ8bVvE4eFcVA06W5wcZwjzz15MLiOOt72r2+WPejr52jt9tr3pYw5MkDDQKYYodS\nCK+GrRrFlZTjU1+xziT/LZkk+ITmNGUeRIeMCZHgqcq7UpfkY/Pek0OrgUcTfShQ\nIxhZPlUgbQ3T/lYCGlO/czA7YlXZGL1VFcwM6zFfT1RasG02ZbUrfcmjhvD+mNqH\nZagsuLhhd1ibc2F88hE293+RM3M/tUXYhRiuFH4YgXwgAvzi60fer63f9+f4k9eq\nJjk6fjt8ih1foyNDufj4\n=piTz\n-----END PGP SIGNATURE-----", + "payload": "tree bcedf1f5ea1114480c3f81bfd288842d9d36df0d\nparent 3b4ec5f6c584e49ca6cf6c618191daff44247806\nauthor Brian White 1479011675 -0500\ncommitter Anna Henningsen 1479792953 +0100\n\ndoc: improve process.emitWarning() example\n\nPR-URL: https://github.com/nodejs/node/pull/9590\nReviewed-By: Roman Reiss \nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "html_url": "https://github.com/nodejs/node/commit/25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/25a6f88d98d732f69562bf95c39bf6d73e35e48d/comments", + "author": { + "login": "mscdex", + "id": 54666, + "node_id": "MDQ6VXNlcjU0NjY2", + "avatar_url": "https://avatars.githubusercontent.com/u/54666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mscdex", + "html_url": "https://github.com/mscdex", + "followers_url": "https://api.github.com/users/mscdex/followers", + "following_url": "https://api.github.com/users/mscdex/following{/other_user}", + "gists_url": "https://api.github.com/users/mscdex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mscdex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mscdex/subscriptions", + "organizations_url": "https://api.github.com/users/mscdex/orgs", + "repos_url": "https://api.github.com/users/mscdex/repos", + "events_url": "https://api.github.com/users/mscdex/events{/privacy}", + "received_events_url": "https://api.github.com/users/mscdex/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3b4ec5f6c584e49ca6cf6c618191daff44247806", + "url": "https://api.github.com/repos/nodejs/node/commits/3b4ec5f6c584e49ca6cf6c618191daff44247806", + "html_url": "https://github.com/nodejs/node/commit/3b4ec5f6c584e49ca6cf6c618191daff44247806" + } + ] + }, + { + "sha": "d964eacd6aafd45f205e540bc7b6037a0f86b667", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDk2NGVhY2Q2YWFmZDQ1ZjIwNWU1NDBiYzdiNjAzN2EwZjg2YjY2Nw==", + "commit": { + "author": { + "name": "Brian White", + "email": "mscdex@mscdex.net", + "date": "2016-11-13T04:38:29Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:54Z" + }, + "message": "doc: remove redundant warning information\n\nprocess.emitWarning() already describes how to emit custom warnings,\nso just merely provide a link to that function from the 'warning'\nevent documentation.\n\nPR-URL: https://github.com/nodejs/node/pull/9590\nReviewed-By: Roman Reiss \nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "5f1853a2732b54ced13f37487776ec2f5e8f0438", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5f1853a2732b54ced13f37487776ec2f5e8f0438" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d964eacd6aafd45f205e540bc7b6037a0f86b667", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k6AAoJENi59a6uhOTPR04P/AnADZoBAE77Nc9s4ivCdVWq\nlZG3xwc9/D/JEsJ7FuUnnSCWOqzd+51C7PdGDvEbMOG+dYryv20cVUcHaLOzILIQ\nJoHweBNBcTGrlWYaEO06fAsDg3Mt4dKnjczz9ZZ+vuGVwgbV+cSa0bWKgM6nd1ZU\nQJ/wlgffURDAo/3q/+1Co2rqCSDTivNQx6QnFikFiT/DZTOi01jScL40L9P1Bg0f\ndhctaXpNV5hvFuCD7QQMI56TdeRwQuZUJDpjkN0HDiUItLmJ7s02xTGxi+/tEsgJ\nQ2SM9N7MMyz9qHyMR1TD8S8iC1IRJ/t7zX9lIc370jtEeTmEPB7ipubQECHRKUX9\nUqwPGqPpyC+6AK0Wb1d58GnRSVtwpJiv0FKQIxkobkaokXfzOirs0bD03nVfSzI+\n7zdzCS6bd8D7TuKo3uzhzYk9PTHcrzfYIKJq0f2bwn7xKns0eH8+jyMG+r//82UE\nRUchMXWBhyf+zkDi6aY7jGC9hqIyQYfbzyGkuBcDQCGo3gk2EJl+Cg3aLMp9wa1m\ndz594AjEKERzBxo1ILzxI0Br+IYAJMfMywEqa/6xdRoAt1UuwW8kvKZzy6yCLywA\noj1R0Hno4W29trX/bGYQIFNxTPJG7EtCc9MvbXHxYc89fwe2mNPUv+shKQgMqyoG\n1GGrEwrfcKOzz6xA0zl4\n=bKGO\n-----END PGP SIGNATURE-----", + "payload": "tree 5f1853a2732b54ced13f37487776ec2f5e8f0438\nparent 25a6f88d98d732f69562bf95c39bf6d73e35e48d\nauthor Brian White 1479011909 -0500\ncommitter Anna Henningsen 1479792954 +0100\n\ndoc: remove redundant warning information\n\nprocess.emitWarning() already describes how to emit custom warnings,\nso just merely provide a link to that function from the 'warning'\nevent documentation.\n\nPR-URL: https://github.com/nodejs/node/pull/9590\nReviewed-By: Roman Reiss \nReviewed-By: Prince John Wesley \nReviewed-By: Colin Ihrig \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d964eacd6aafd45f205e540bc7b6037a0f86b667", + "html_url": "https://github.com/nodejs/node/commit/d964eacd6aafd45f205e540bc7b6037a0f86b667", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d964eacd6aafd45f205e540bc7b6037a0f86b667/comments", + "author": { + "login": "mscdex", + "id": 54666, + "node_id": "MDQ6VXNlcjU0NjY2", + "avatar_url": "https://avatars.githubusercontent.com/u/54666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mscdex", + "html_url": "https://github.com/mscdex", + "followers_url": "https://api.github.com/users/mscdex/followers", + "following_url": "https://api.github.com/users/mscdex/following{/other_user}", + "gists_url": "https://api.github.com/users/mscdex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mscdex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mscdex/subscriptions", + "organizations_url": "https://api.github.com/users/mscdex/orgs", + "repos_url": "https://api.github.com/users/mscdex/repos", + "events_url": "https://api.github.com/users/mscdex/events{/privacy}", + "received_events_url": "https://api.github.com/users/mscdex/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "url": "https://api.github.com/repos/nodejs/node/commits/25a6f88d98d732f69562bf95c39bf6d73e35e48d", + "html_url": "https://github.com/nodejs/node/commit/25a6f88d98d732f69562bf95c39bf6d73e35e48d" + } + ] + }, + { + "sha": "7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6N2FmNjgwZTZmZTUzMWUwNjc5MmFlMmMwZGJkZjhkN2M1YzcyNDNjNA==", + "commit": { + "author": { + "name": "Daniel Bevenius", + "email": "daniel.bevenius@gmail.com", + "date": "2016-11-08T20:04:57Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:54Z" + }, + "message": "doc: make comment indentation consistent\n\nCurrently, some of the docs use different indentation for comments\nin the code examples. This commit makes the indentation consistent\nby putting the comments at the beginning of the line (really no\nindentation that is).\n\nPR-URL: https://github.com/nodejs/node/pull/9518\nReviewed-By: Teddy Katz \nReviewed-By: Roman Reiss \nReviewed-By: Michaël Zasso ", + "tree": { + "sha": "e62ad917d30f8daeddf7c054318fb37315e2c54c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/e62ad917d30f8daeddf7c054318fb37315e2c54c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k6AAoJENi59a6uhOTPS9IQAKC5JsDP9OozfSghx285x6wv\nem7j6n6ImGDm86EpLj+9b0DZgoD0KEG6kI2sEK7JpiABtdycQRWO2AppTq3GgGyv\nXnq6XG1bkKR0mcmOW7/cB7kfk/hYlAG+iA2bhAmUGuC3wi97ZbDchWePcWaLHpxS\ndLjN9FJPwQTfPChoErVAdCb4RMaFVz7bNBU24cZCP5gAbuDxO8gbl1b7QBv0Ht6R\nMSGAywe8WIt2T1jy8ZeI2zEwCAKcB1X7z4uS5X7FrJPsXExb/uTSZOK0e+MVS+it\nD1sbLJkmoQlIAjkl8pPBuD93tFQn6TCZCY+zlfwMR5N20mcNMrfDAIOP8VV3zBJO\nejkRg+t02xllXad+iX9suwsZAG/UVhN+G5lRmNjeV+j59GOvQRtgZ32zlnjxf7y7\nVmlOeWqsDhjlc1QjZhrx5JXXPwep+44bZOSvlbCV5nVZ/0TfyJ9W6qkG6v4p7Vam\nKpV1H7ncemrGb9OqkitWaAly4hhmm1rXc+dfLTClgNqa53BqRbeQJ6tM3nfZSIEy\n1uGSwxd2kqe0yPiYCtJHydU96LUA6R4WWA7JGxl9D29x592w4dfmSi7qp2UqRULI\n2O8SLSMjp0KoWF6V6J7pewHdYNzQrtJLo0uTci6xE2FRC0C/w5UtHqZKfu06wqc+\nyjcsKcTla1ry3+E7hsms\n=C7rT\n-----END PGP SIGNATURE-----", + "payload": "tree e62ad917d30f8daeddf7c054318fb37315e2c54c\nparent d964eacd6aafd45f205e540bc7b6037a0f86b667\nauthor Daniel Bevenius 1478635497 +0100\ncommitter Anna Henningsen 1479792954 +0100\n\ndoc: make comment indentation consistent\n\nCurrently, some of the docs use different indentation for comments\nin the code examples. This commit makes the indentation consistent\nby putting the comments at the beginning of the line (really no\nindentation that is).\n\nPR-URL: https://github.com/nodejs/node/pull/9518\nReviewed-By: Teddy Katz \nReviewed-By: Roman Reiss \nReviewed-By: Michaël Zasso \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "html_url": "https://github.com/nodejs/node/commit/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4/comments", + "author": { + "login": "danbev", + "id": 432351, + "node_id": "MDQ6VXNlcjQzMjM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/432351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/danbev", + "html_url": "https://github.com/danbev", + "followers_url": "https://api.github.com/users/danbev/followers", + "following_url": "https://api.github.com/users/danbev/following{/other_user}", + "gists_url": "https://api.github.com/users/danbev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danbev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danbev/subscriptions", + "organizations_url": "https://api.github.com/users/danbev/orgs", + "repos_url": "https://api.github.com/users/danbev/repos", + "events_url": "https://api.github.com/users/danbev/events{/privacy}", + "received_events_url": "https://api.github.com/users/danbev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d964eacd6aafd45f205e540bc7b6037a0f86b667", + "url": "https://api.github.com/repos/nodejs/node/commits/d964eacd6aafd45f205e540bc7b6037a0f86b667", + "html_url": "https://github.com/nodejs/node/commit/d964eacd6aafd45f205e540bc7b6037a0f86b667" + } + ] + }, + { + "sha": "9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OWEwYmNmYzQ1MjJiMjMzYzU1MDZkYTkxYjAxYjZkNjQ5Y2ZlNTAyMA==", + "commit": { + "author": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-09-30T14:16:28Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:55Z" + }, + "message": "fs: export `realpathCacheKey` from `internal/fs`\n\nMove the internally defined symbol `fs.realpathCacheKey` to\nthe internal fs module, where it’s more appropriate.\n\nThe symbol was recently added in c084287a608ef, but since\n`internal/fs` is only available in the v7.x branch, this\nneeds to be a separate follow-up change.\n\nPR-URL: https://github.com/nodejs/node/pull/8862\nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell ", + "tree": { + "sha": "67799c40c7732a94f9aa2df57747a83a9e0fa928", + "url": "https://api.github.com/repos/nodejs/node/git/trees/67799c40c7732a94f9aa2df57747a83a9e0fa928" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k7AAoJENi59a6uhOTPHKQP/jkoRIDtUOxFB55w7JMvGd9H\nkv2oRTCiOzz7LDc8DaB7iQq+7LMKs1o7OPmmiBlTbYd8ay18VFCWkQgwGHFPH5ws\nKc8jaFstTI3G0xVE2zh4AYPI/4nmGnQoTCnEQuo7sOkp/MaXc+IY5HrSkfSjqZ7d\n79cjV2RJViAwTkPXgJeGZq62EG60wfby9HbAL+q+xJ4AZho9ik/+AuxehybtmWXh\n9buqyshZVDb7XOngR8bcyUjdQJBRel7rai1swwlLFDAmYa8tQrOa2lkwYyya5Ml3\nxGMoRDxe1d8d5cEQ9Qvh9J68cOZaCh43w+pVXLabxpnAsoJryIZRqrg5C8HRKPgk\nmGoj3HcXfTUpZNCOd2Jb8qeSK4bwnYLfGoQ8+lYAka4EWPn0HDxB528gsb49XrTN\noXGCh029duvjuQyBbv93lHRjMTxQtM3B5NNzD7o8mE8IS0usVOkYnt0MHsv4K+h1\n8l9FlGk3vGyvDxokzVvSdOWdRec5tanjQhcKMtu6EUTiwwouJxr/7X6RCDIQSR48\nD/XV0d24TWIf4qmE0IJgmNbzKdGnSLGSlgrycjr7SgHdwZyf3geqlYDmtjcHccX4\ngobBsnKhe93F66X1wqwrN2B1lDtb2JLmtbpK8rpjxihoGL+wEsGidrd4sAIQk+sJ\nE0yAcTMpa6JySBq70eG2\n=ehKa\n-----END PGP SIGNATURE-----", + "payload": "tree 67799c40c7732a94f9aa2df57747a83a9e0fa928\nparent 7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4\nauthor Anna Henningsen 1475244988 +0200\ncommitter Anna Henningsen 1479792955 +0100\n\nfs: export `realpathCacheKey` from `internal/fs`\n\nMove the internally defined symbol `fs.realpathCacheKey` to\nthe internal fs module, where it’s more appropriate.\n\nThe symbol was recently added in c084287a608ef, but since\n`internal/fs` is only available in the v7.x branch, this\nneeds to be a separate follow-up change.\n\nPR-URL: https://github.com/nodejs/node/pull/8862\nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "html_url": "https://github.com/nodejs/node/commit/9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/9a0bcfc4522b233c5506da91b01b6d649cfe5020/comments", + "author": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "url": "https://api.github.com/repos/nodejs/node/commits/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4", + "html_url": "https://github.com/nodejs/node/commit/7af680e6fe531e06792ae2c0dbdf8d7c5c7243c4" + } + ] + }, + { + "sha": "cc6901d48204363888fda4b54a85ca070f798092", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6Y2M2OTAxZDQ4MjA0MzYzODg4ZmRhNGI1NGE4NWNhMDcwZjc5ODA5Mg==", + "commit": { + "author": { + "name": "Sakthipriyan Vairamani (thefourtheye)", + "email": "thechargingvolcano@gmail.com", + "date": "2016-11-03T09:03:13Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:55Z" + }, + "message": "tools: improve docopen target in Makefile\n\n1. As it is, it just tries to build only the `all.html` file. If none of\n the other files are built already, generated page will not be good.\n To fix this, we process the assets and generate HTML files first.\n\n2. After the HTML is generated, `google-chrome` is used to open the\n generated file in browser. This is not very portable as it might not\n be installed or installations might have used a different name. So,\n we use Python's webbrowser module to open the file.\n\nPR-URL: https://github.com/nodejs/node/pull/9436\n\nReviewed-By: Daniel Bevenius \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "b99061e61bb15a5d97b1f6a1627b42c7429a6032", + "url": "https://api.github.com/repos/nodejs/node/git/trees/b99061e61bb15a5d97b1f6a1627b42c7429a6032" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/cc6901d48204363888fda4b54a85ca070f798092", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k7AAoJENi59a6uhOTP4XwP/jzj9xkyH/cUxpoaWMxjiz9Z\nYRDOKgb5bfcm8wFf5hFU9qEFLbDJSVqIJxX8hPoSP7YkUj+SwJLNyKzL/YZxtcUK\nB8uxT/FV5EcmlGqNMUfDPPVfMDT2TC9qUpdlkxo+sdlEseovaj0K+jFMbu2BpbM7\ns6sD0/CLFzSLdV4GWNs/jCHcTdhGZMDNZY9PvheaGirnCr8rx/LUsaswmWaAHYN7\nTsw5I5Yj/d9JMGQ15vv/O4tiZfXuCGYTI4MltjrY80St4g0aqv0gKGqvxUF+9M1m\nnjmXrWv1MSmZ9xoQZxZV7r0m5uSyac3mxkY7QCI9Nef1HFDS6aWMos3Knb9Hc1Vy\nrUVlTr4D+lQ4ELwG++88K7aH9ZxwPFsLDa8GMZ2ZVY1F/QOdDwjnKaq+/3WT79jb\ncrqhp4RcyGNJCyAAb/EskIda+X9R/rxC+K6NxsjsUuBCiJElCdePgImpoltiLUlM\nF/Mf8MPhglMeXAkIGhPPzPtQOpRdlE2JajhFnDgAWmQUraNCJjNe+2hgt+NpSfkL\n6mAteaMsSipNn4An/pljJePzfPah3OBhmD0OYPAKWkVxyn7E8Cjg5JJB9YzN/JV2\nmBWqw/V8cuRP49rsMlxt3F+UUrmQwIOYCvRTtdYTBdneGMSAMwJDBU5lTqSsO0Xk\n80xD+KFX8NYeakBdgXW0\n=35jC\n-----END PGP SIGNATURE-----", + "payload": "tree b99061e61bb15a5d97b1f6a1627b42c7429a6032\nparent 9a0bcfc4522b233c5506da91b01b6d649cfe5020\nauthor Sakthipriyan Vairamani (thefourtheye) 1478163793 +0530\ncommitter Anna Henningsen 1479792955 +0100\n\ntools: improve docopen target in Makefile\n\n1. As it is, it just tries to build only the `all.html` file. If none of\n the other files are built already, generated page will not be good.\n To fix this, we process the assets and generate HTML files first.\n\n2. After the HTML is generated, `google-chrome` is used to open the\n generated file in browser. This is not very portable as it might not\n be installed or installations might have used a different name. So,\n we use Python's webbrowser module to open the file.\n\nPR-URL: https://github.com/nodejs/node/pull/9436\n\nReviewed-By: Daniel Bevenius \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/cc6901d48204363888fda4b54a85ca070f798092", + "html_url": "https://github.com/nodejs/node/commit/cc6901d48204363888fda4b54a85ca070f798092", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/cc6901d48204363888fda4b54a85ca070f798092/comments", + "author": { + "login": "thefourtheye", + "id": 696611, + "node_id": "MDQ6VXNlcjY5NjYxMQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/696611?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/thefourtheye", + "html_url": "https://github.com/thefourtheye", + "followers_url": "https://api.github.com/users/thefourtheye/followers", + "following_url": "https://api.github.com/users/thefourtheye/following{/other_user}", + "gists_url": "https://api.github.com/users/thefourtheye/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thefourtheye/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thefourtheye/subscriptions", + "organizations_url": "https://api.github.com/users/thefourtheye/orgs", + "repos_url": "https://api.github.com/users/thefourtheye/repos", + "events_url": "https://api.github.com/users/thefourtheye/events{/privacy}", + "received_events_url": "https://api.github.com/users/thefourtheye/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "url": "https://api.github.com/repos/nodejs/node/commits/9a0bcfc4522b233c5506da91b01b6d649cfe5020", + "html_url": "https://github.com/nodejs/node/commit/9a0bcfc4522b233c5506da91b01b6d649cfe5020" + } + ] + }, + { + "sha": "875d1b93fc122902d2883a504212c0f97d1ff9cb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODc1ZDFiOTNmYzEyMjkwMmQyODgzYTUwNDIxMmMwZjk3ZDFmZjljYg==", + "commit": { + "author": { + "name": "Yoshiya Hinosawa", + "email": "stibium121@gmail.com", + "date": "2016-11-12T08:16:03Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:56Z" + }, + "message": "test: add test case of PassThrough\n\nThis commit adds the test case of PassThrough.\nThis test case checks that PassThrough can\nconstruct without new operator.\n\nThis is a part of Code And Learn at NodeFest 2016\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9581\nReviewed-By: Yosuke Furukawa \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "0151609711b66ffb1163f6db79cf2f0aba0ed3e6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/0151609711b66ffb1163f6db79cf2f0aba0ed3e6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/875d1b93fc122902d2883a504212c0f97d1ff9cb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k8AAoJENi59a6uhOTPiR4QAK39hE4PppKybIS3Su7x3Z8t\nIxoBths/IExP0IcqP9NKFz3X1dewBS8N6gaZTrGyxaZ63Tus8zfAMsuUXByszKig\ns3+7l2yMVUNze4092vZ/7OuaRklq/w/MFD9mk4vwNxlV9XDx6nXA/iImf3i3wCVy\naLyom6h9IHZNd2IpQ0gRxQ/RmvF7r8k0w9mCPQ6MUvsPVAQD8/TliNsB6XNDix9h\nfsT19kQS8NToicTdqd9gjZpML92DxylWnMj6RzWkTB9DRg4jO6aiBURX/mHh1u+u\n5te/fKem6IF3WRqopEna4OD914kFr1JKLmZAA8qiWKy3E1H/4sAfDmKxJbxZDJAJ\nOZNuuH1DF83VyZ7P7dtSLVi3DWroL4dhAuWzmob4QUnxaFokjDo7wG0lH0uNvlMl\njAooe5bAGJkZJrxWKDs1dorWW0M/mX2h3JhW6acPZT3LUgq0xQ1LrFxR9sNWkyUA\nDhdAjeiiErgZpQO5iJb2eqmrvPkBC7HeJ3XWLG+M2IYLFvOgsQ1WRErA6eh+k+DI\n6F74HERcQ/qeYV7hddc6jc6caHcgyEXJYfNYkN7F75LLC43eC3fMxGE8fcBzxwWt\ntzN6NmWS8y5cT559KIKTkTW1qNQ7TMneUMm+BO6igYIhDvxtDZMfgCnj+FWNB7D/\nyA3gP7xjcGD1L+/ZdZH6\n=pZoY\n-----END PGP SIGNATURE-----", + "payload": "tree 0151609711b66ffb1163f6db79cf2f0aba0ed3e6\nparent cc6901d48204363888fda4b54a85ca070f798092\nauthor Yoshiya Hinosawa 1478938563 +0900\ncommitter Anna Henningsen 1479792956 +0100\n\ntest: add test case of PassThrough\n\nThis commit adds the test case of PassThrough.\nThis test case checks that PassThrough can\nconstruct without new operator.\n\nThis is a part of Code And Learn at NodeFest 2016\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9581\nReviewed-By: Yosuke Furukawa \nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/875d1b93fc122902d2883a504212c0f97d1ff9cb", + "html_url": "https://github.com/nodejs/node/commit/875d1b93fc122902d2883a504212c0f97d1ff9cb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/875d1b93fc122902d2883a504212c0f97d1ff9cb/comments", + "author": { + "login": "kt3k", + "id": 613956, + "node_id": "MDQ6VXNlcjYxMzk1Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/613956?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kt3k", + "html_url": "https://github.com/kt3k", + "followers_url": "https://api.github.com/users/kt3k/followers", + "following_url": "https://api.github.com/users/kt3k/following{/other_user}", + "gists_url": "https://api.github.com/users/kt3k/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kt3k/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kt3k/subscriptions", + "organizations_url": "https://api.github.com/users/kt3k/orgs", + "repos_url": "https://api.github.com/users/kt3k/repos", + "events_url": "https://api.github.com/users/kt3k/events{/privacy}", + "received_events_url": "https://api.github.com/users/kt3k/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "cc6901d48204363888fda4b54a85ca070f798092", + "url": "https://api.github.com/repos/nodejs/node/commits/cc6901d48204363888fda4b54a85ca070f798092", + "html_url": "https://github.com/nodejs/node/commit/cc6901d48204363888fda4b54a85ca070f798092" + } + ] + }, + { + "sha": "474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NDc0ZDRhYTJlMzg0NDFhYTVjZjRmMzAzYjdiOGFkNDhlMjBjOGM2Yw==", + "commit": { + "author": { + "name": "Mitsuo Utano", + "email": "utano320@gmail.com", + "date": "2016-11-12T08:04:28Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:35:56Z" + }, + "message": "doc: fix typo in doc/repl.md line: 6\n\nfix doc/api/repl.md line 6 \"includable\" => \"includible\"\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9582\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "767b5729dec67ef4147282bcb5edcc3bbb37bcb3", + "url": "https://api.github.com/repos/nodejs/node/git/trees/767b5729dec67ef4147282bcb5edcc3bbb37bcb3" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9k9AAoJENi59a6uhOTPHUkQAI17jo1941mpspWALjfQyCNx\n9cwap4UWeYv4ud0kPAiDfh17Xm7HZgVE4jK5Kfcji3Hre3C0fonfr4WqqJKxqFhR\nXgSFSSPZOpsBfm22P5QY4cyHx2ceV1rAsLrvehtDxNcDiLLBRDdibFCs2E5jl+ak\nLGL6/iYNVuU+cPFkAvmr1OFG1E4q2eBvMRj19e0PHllWaR7epxtmcjCIiJeidxk6\nhvErFPz5tJIKWtYmRb1zirc6Iw7aNIv+j26NWqVgjnSTwLTaNLfB8miur3QX4/Ba\nUKjm8+a2o5/u6VeTlCpFJmqqgCx7rs6J3xEg2pDvfxcxSzmlWq2vIanNF+3naV4S\nR5ifj7EFqyFhzPDMH8hyTZYuN/2gcRKicF9SLF6kMr5cIbSsXIHlp6FkyLPgvQOu\nJuqGkIeXqaYkOkvzAanFwvBeWHRC3Zt9GbtPit8lnHf7DfO442J9bUhV5pEKbUQJ\ndLW1Wpr8BS8u+KKA2WaxF8EOWKyfAVB10HAmnAPd+Z3mjUgdZt2XLk5/adp2+eE9\nJliqgGdMEsXgn7ez2d/yEw0BsJI/b2xAvtxXBdv7eyBaubz8FDPhR6OjHJAn9vGE\nlFyhyBur5/VObrsDkDm+aUzbiif32uR8kGODDjpyeOUM/yOkKwHAVwpzEayvc/bY\nLFl/ptqgsGqEJfdu0CDx\n=r2R7\n-----END PGP SIGNATURE-----", + "payload": "tree 767b5729dec67ef4147282bcb5edcc3bbb37bcb3\nparent 875d1b93fc122902d2883a504212c0f97d1ff9cb\nauthor Mitsuo Utano 1478937868 +0900\ncommitter Anna Henningsen 1479792956 +0100\n\ndoc: fix typo in doc/repl.md line: 6\n\nfix doc/api/repl.md line 6 \"includable\" => \"includible\"\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9582\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "html_url": "https://github.com/nodejs/node/commit/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c/comments", + "author": { + "login": "utano320", + "id": 2193992, + "node_id": "MDQ6VXNlcjIxOTM5OTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2193992?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/utano320", + "html_url": "https://github.com/utano320", + "followers_url": "https://api.github.com/users/utano320/followers", + "following_url": "https://api.github.com/users/utano320/following{/other_user}", + "gists_url": "https://api.github.com/users/utano320/gists{/gist_id}", + "starred_url": "https://api.github.com/users/utano320/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/utano320/subscriptions", + "organizations_url": "https://api.github.com/users/utano320/orgs", + "repos_url": "https://api.github.com/users/utano320/repos", + "events_url": "https://api.github.com/users/utano320/events{/privacy}", + "received_events_url": "https://api.github.com/users/utano320/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "875d1b93fc122902d2883a504212c0f97d1ff9cb", + "url": "https://api.github.com/repos/nodejs/node/commits/875d1b93fc122902d2883a504212c0f97d1ff9cb", + "html_url": "https://github.com/nodejs/node/commit/875d1b93fc122902d2883a504212c0f97d1ff9cb" + } + ] + }, + { + "sha": "51e24e770abf1e2c452969b508d5fea781cd3dc0", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NTFlMjRlNzcwYWJmMWUyYzQ1Mjk2OWI1MDhkNWZlYTc4MWNkM2RjMA==", + "commit": { + "author": { + "name": "masashi.g", + "email": "masashi.g@gmail.com", + "date": "2016-11-12T13:56:19Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:36:11Z" + }, + "message": "test: use setImmediate() in test of stream2\n\nuse setImmediate() insted of setTimeout()\n in test of stream2 push.\nThe test is in test/parallel/test-stream2-push.js\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9583\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "7813218cf046c59abcdf3be7ee97d6bf7665ec1b", + "url": "https://api.github.com/repos/nodejs/node/git/trees/7813218cf046c59abcdf3be7ee97d6bf7665ec1b" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/51e24e770abf1e2c452969b508d5fea781cd3dc0", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9lLAAoJENi59a6uhOTPoGMQAKL2ZSc56Zh4nIxLOumx5YIc\nXJwB2jY9FwSTz3U6DCLMn0tEFFNWjCOQpQkYVhTKy4opu337KGWi0sF6dUZwlCwP\nFOC2O8CJz1n4LP/l7T/N2rlRJ56HH3GnIkeeRtE4zOaMNVrESyj7pHk6l9Dm/Rju\nlhjcccD8kTv5ThAQeJSbo4HZUiB7pApT8AYhiXi1g4UodSStlKBd6/L3+52uOIL2\nuZPslWjCQLNq49IuIgBewSOQCt7B13Jpwx73IdHmM2MxyftZ69SOnh+3tpmMNZ5v\nsS0Qky5m9yT+pD0fkzduvCXn5SBtd0bCFyg2Zpl5st6Y1w2LFyxLOBkyqC+ox21M\nuYB6Pqwvp4SdZ6I0PFrf1vf3UFsG7T2XDt6SQjxpD4Y+OWoyGaD+xZLad2/dNm1v\nHYPKv/Cvvc4/esIwT/GA/VcJ6PYKs50JC1RI6ojOLoM/EkZTpmgZjzj7NfrYkoa0\nkUWHjxrHaxPqq9ORwOMuo2MbREJ1IFI8qLDvJn13BTOa2isVyhKuUj4O1s2hGnoy\nnuImmVlZJqMl3eMsRihtFmzjyJFsJquutVaEG+Evg3kPnOuD9895dDAsyZg/lQPN\nEo6KKm+fue9NnPucAZSxGagYwdIHKKxl5VmcIhOqlQWzEcGdRuvPqzAKozasubGQ\nbWAuw8VeWSEwHCZD/5sx\n=hsHS\n-----END PGP SIGNATURE-----", + "payload": "tree 7813218cf046c59abcdf3be7ee97d6bf7665ec1b\nparent 474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c\nauthor masashi.g 1478958979 +0900\ncommitter Anna Henningsen 1479792971 +0100\n\ntest: use setImmediate() in test of stream2\n\nuse setImmediate() insted of setTimeout()\n in test of stream2 push.\nThe test is in test/parallel/test-stream2-push.js\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9583\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/51e24e770abf1e2c452969b508d5fea781cd3dc0", + "html_url": "https://github.com/nodejs/node/commit/51e24e770abf1e2c452969b508d5fea781cd3dc0", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/51e24e770abf1e2c452969b508d5fea781cd3dc0/comments", + "author": { + "login": "mganeko", + "id": 3625666, + "node_id": "MDQ6VXNlcjM2MjU2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3625666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mganeko", + "html_url": "https://github.com/mganeko", + "followers_url": "https://api.github.com/users/mganeko/followers", + "following_url": "https://api.github.com/users/mganeko/following{/other_user}", + "gists_url": "https://api.github.com/users/mganeko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mganeko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mganeko/subscriptions", + "organizations_url": "https://api.github.com/users/mganeko/orgs", + "repos_url": "https://api.github.com/users/mganeko/repos", + "events_url": "https://api.github.com/users/mganeko/events{/privacy}", + "received_events_url": "https://api.github.com/users/mganeko/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "url": "https://api.github.com/repos/nodejs/node/commits/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c", + "html_url": "https://github.com/nodejs/node/commit/474d4aa2e38441aa5cf4f303b7b8ad48e20c8c6c" + } + ] + }, + { + "sha": "4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NGRkYzIzODI4ZDFhY2I1N2JiYmNhOTRlYmFiZWMyYjAzY2ZkNDllYw==", + "commit": { + "author": { + "name": "James M Snell", + "email": "jasnell@gmail.com", + "date": "2016-11-07T16:26:19Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:36:12Z" + }, + "message": "doc: move TSC and CTC meeting minutes out of core repo\n\nThe TSC and CTC meeting minutes are more properly placed in\nthe nodejs/tsc and nodejs/ctc repositories, respectively.\n\nPR-URL: https://github.com/nodejs/node/pull/9503\nReviewed-By: Colin Ihrig \nReviewed-By: Myles Borins \nReviewed-By: Michael Dawson \nReviewed-By: Evan Lucas \nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "2fcc34df5e6bb65248bcf6e3cb87a6afc287b5cc", + "url": "https://api.github.com/repos/nodejs/node/git/trees/2fcc34df5e6bb65248bcf6e3cb87a6afc287b5cc" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9lMAAoJENi59a6uhOTPShQQAKv0lxkL3L1/MqD6E6M33l4W\nsGY8YE6odi8g9opZGxot0WzvCaeVm0hehJJP71CF78BAwBcY7uiW1MF1I9Q5dDyT\nzm9RsUAVjSzAiC5Y2V3WvbqK/mQEyQergI/aX+VjvHLF0B6dzSCB6dQYDRrzyg1A\ny9SYooKu87UtmEKMmKRlhOqeSpbvsq67WWfSin/Ucl5/forQMCsu+hfwmhHGGlor\nJmDgwp0bDPL8Vs5i7X6Ko6eF8w4qju0rT1y5jP0UW7Syi+MceHUAHt+x3yeWksbV\nr6aQz9hF3jUf1UZVstoEvrSyMMEiDsmukLa3VIztizmljjf5bSbOgnIh+GziUBRt\nmru7f21bqtEYy+yLEKawiRdK29IMsBOnPqfBtIi6/ruDi1nHUdgiwIjHzEE5EGaP\neOZoy9ThB9hIqVnXZJU7+NrHlvX2bjQ5Lml7Cd3CiLa6dWjVX2tyYAm0GUf/pJWy\nzoynJIyPVUE3upB6TF3kTHL+tWiEidP2mXZ+NYZTcI2Z2ox/DNn5hKTehTheOWkK\nGBlcPzUINEzv4dMhHsqDTWILKDsxRnkUPnddD6GbwztjDQ43dkbrQJFDvcXss62k\nhO9A7JV/eSRtOde76eR/Ip3mQsnjcR6nURNCtk1sTNrMPz7fQNcocJ4xzr73ihwo\nZZ+RYWm4oPevFOCMwxWt\n=tqjY\n-----END PGP SIGNATURE-----", + "payload": "tree 2fcc34df5e6bb65248bcf6e3cb87a6afc287b5cc\nparent 51e24e770abf1e2c452969b508d5fea781cd3dc0\nauthor James M Snell 1478535979 -0800\ncommitter Anna Henningsen 1479792972 +0100\n\ndoc: move TSC and CTC meeting minutes out of core repo\n\nThe TSC and CTC meeting minutes are more properly placed in\nthe nodejs/tsc and nodejs/ctc repositories, respectively.\n\nPR-URL: https://github.com/nodejs/node/pull/9503\nReviewed-By: Colin Ihrig \nReviewed-By: Myles Borins \nReviewed-By: Michael Dawson \nReviewed-By: Evan Lucas \nReviewed-By: Rich Trott \nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "html_url": "https://github.com/nodejs/node/commit/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec/comments", + "author": { + "login": "jasnell", + "id": 439929, + "node_id": "MDQ6VXNlcjQzOTkyOQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/439929?v=4", + "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 + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "51e24e770abf1e2c452969b508d5fea781cd3dc0", + "url": "https://api.github.com/repos/nodejs/node/commits/51e24e770abf1e2c452969b508d5fea781cd3dc0", + "html_url": "https://github.com/nodejs/node/commit/51e24e770abf1e2c452969b508d5fea781cd3dc0" + } + ] + } + ] + \ No newline at end of file diff --git a/test/_fixtures/pull-request-commits-page-3.json b/test/_fixtures/pull-request-commits-page-3.json new file mode 100644 index 00000000..3c3ef9a7 --- /dev/null +++ b/test/_fixtures/pull-request-commits-page-3.json @@ -0,0 +1,2354 @@ +[ + { + "sha": "7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NzQyMGNlOGI3ZTg1MGVjYjVjMTFhM2M1Y2Y4N2JkYTVlOThlN2U0Zg==", + "commit": { + "author": { + "name": "solebox", + "email": "solekiller@gmail.com", + "date": "2016-10-16T11:03:38Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:36:12Z" + }, + "message": "src: squelch unused function warnings in util.h\n\nFixes: https://github.com/nodejs/node/issues/9083\n\nPR-URL: https://github.com/nodejs/node/pull/9115\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "5c24b3a7e76631b94d17d88b0fadfc6b9db939cd", + "url": "https://api.github.com/repos/nodejs/node/git/trees/5c24b3a7e76631b94d17d88b0fadfc6b9db939cd" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9lMAAoJENi59a6uhOTPdQQP/i9RkMNw/ZAaoD+T2PdGbIk6\noPrS9KnAAPTOZYMEe59+zxErTUVHS5DEi+CD0TmSpUM3LEYKPuoMq8VvMab4Kjop\nFhTsNrsmo0h5Q4hhf7IF5OJhvwCp444J+e7hHTXQX1eAZxI7Kd+u5g7MZRTLC8nH\ncIQfXB1oI2w8Bg9bj4UkCSi6nzfPy7qxbkwS5IisxayylVrFUZXW+PwzEMQHdw7f\nAZ9bP1l4m9PiYphbLMksrmWocCFO9GAL8YWtE7C9ZckgIl7Wgh0wsAXJOGZ5Zhnm\nIZ1WlKwYrqa8V+q9IV7PceTy4f+kRhJom2XdTbssDZgalrq9N2OVuFVPZ7dmhR/N\n5xS79T2JZwUCh9+nKv8yTCBbJLDoG7muaD6FR7EGngvN+om1jcEN8cxvHFKQcdTc\noq5GM4Ko34duMBto3zMQbGfQIq8/n+41xb/CrialIrwrfMX6HKMVaOvuibrV3DEV\nr5o5jr6rtFUhhnykmFOFAH9zeGMh6q7yAneiTTa43a+k5XcUrI496YPpZipchLLa\nOG4/lXABECtKl+ulrIFvS0SNQaYBSzGg+kGzNugfr0Hb61WGuUazahlOEDAGlUdB\nIN5w8LbJt0iYsljcCC2mAMOcC/u9d3VAYKRMUt3UOK8qjIf7WkOjJKaSH84s3WJb\nk5Re6QViIqDbmD6OktuH\n=N9aB\n-----END PGP SIGNATURE-----", + "payload": "tree 5c24b3a7e76631b94d17d88b0fadfc6b9db939cd\nparent 4ddc23828d1acb57bbbca94ebabec2b03cfd49ec\nauthor solebox 1476615818 +0300\ncommitter Anna Henningsen 1479792972 +0100\n\nsrc: squelch unused function warnings in util.h\n\nFixes: https://github.com/nodejs/node/issues/9083\n\nPR-URL: https://github.com/nodejs/node/pull/9115\nReviewed-By: Anna Henningsen \nReviewed-By: James M Snell \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "html_url": "https://github.com/nodejs/node/commit/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f/comments", + "author": { + "login": "solebox", + "id": 103052, + "node_id": "MDQ6VXNlcjEwMzA1Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/103052?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solebox", + "html_url": "https://github.com/solebox", + "followers_url": "https://api.github.com/users/solebox/followers", + "following_url": "https://api.github.com/users/solebox/following{/other_user}", + "gists_url": "https://api.github.com/users/solebox/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solebox/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solebox/subscriptions", + "organizations_url": "https://api.github.com/users/solebox/orgs", + "repos_url": "https://api.github.com/users/solebox/repos", + "events_url": "https://api.github.com/users/solebox/events{/privacy}", + "received_events_url": "https://api.github.com/users/solebox/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "url": "https://api.github.com/repos/nodejs/node/commits/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec", + "html_url": "https://github.com/nodejs/node/commit/4ddc23828d1acb57bbbca94ebabec2b03cfd49ec" + } + ] + }, + { + "sha": "a086566be615785960e23c4fa98528886fbcbd3b", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YTA4NjU2NmJlNjE1Nzg1OTYwZTIzYzRmYTk4NTI4ODg2ZmJjYmQzYg==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-17T20:17:07Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:36:58Z" + }, + "message": "doc: fix an SNI mistyped as SNS\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "425ecbc5eef2613831dd22f5683c72c8a9ba8771", + "url": "https://api.github.com/repos/nodejs/node/git/trees/425ecbc5eef2613831dd22f5683c72c8a9ba8771" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/a086566be615785960e23c4fa98528886fbcbd3b", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l7AAoJENi59a6uhOTPza4QALzBpw0Dt3Lfd3tR2qyEoqEX\nnu2BZcJPeqqWktXulukP+zehazleGpCfKM7BMYeur8TZQ4WxhXaYaTpXQUvJAxje\nf6BQ5iPxZvyYf2f4tLhS+Z53KyPTjY9Jp0vVTmAN3Nl9cu21vDS0PsmBM6MHWy5T\n/pcySf6hnklo8O5m9vkDOd5EHBcpR//gpmcpCthNAWzruR6i31JKO+kZOVYJMNBr\npoWbNU+cs6turyYNpNzNXs7NLSnehaDdAnGyuAUZiHkIyihBbTUMwrmyp+EBCGYC\nqz9n6LFPVoP5/TzMXz88sLUStpCLI2/HT78NUkexI3zugdBMN5Seu37xstVuhaA6\nJmx2cnNMfKfWKW2aZfnNG5ZGkVwgKazHIb/wMf79Okmm74fJzV9sjE3nTV5iBn61\nH2V6po8bpSZ077TFe5+WaNSN8V6wZqpIiubBMuSTC52h+E2ZbCK+nloPPUqxeF++\n6dVO/g6pj5iwoWcyDO1ZDaaA3/7wNKD6D+zznJGajPBeZVPsvLQF5brYFdds2uip\nh3AXpd58hTpSOBAkJODOcY0BZ5ZGDWBWAciR6cQv75RVytDuEcLMn/kXneKbn5g7\n9QOAfJVTrtJm7p4cV9dtua5zwcoK0gR9vrk/UBvP1QMb7qkqAlZUv1xOwR1rNqS+\n8P9h2DhxiOfCYw7/RcWZ\n=jfYL\n-----END PGP SIGNATURE-----", + "payload": "tree 425ecbc5eef2613831dd22f5683c72c8a9ba8771\nparent 7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f\nauthor Sam Roberts 1479413827 -0800\ncommitter Anna Henningsen 1479793018 +0100\n\ndoc: fix an SNI mistyped as SNS\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/a086566be615785960e23c4fa98528886fbcbd3b", + "html_url": "https://github.com/nodejs/node/commit/a086566be615785960e23c4fa98528886fbcbd3b", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/a086566be615785960e23c4fa98528886fbcbd3b/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "url": "https://api.github.com/repos/nodejs/node/commits/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f", + "html_url": "https://github.com/nodejs/node/commit/7420ce8b7e850ecb5c11a3c5cf87bda5e98e7e4f" + } + ] + }, + { + "sha": "f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZjQzZTQ3YWFiMmJjNDAwYTViZmRmNGZmMTYyYTg0ODRlMzU1OTYzMA==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-17T20:24:43Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:36:59Z" + }, + "message": "doc: describe when a tls server emits 'close'\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "da701a3cb6a8425ff3c8a711179dec717152b68e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/da701a3cb6a8425ff3c8a711179dec717152b68e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l7AAoJENi59a6uhOTPHo0P/3GeWE0WL1htcf7VBMwy6qo1\nvhs/bQHv2FVT9oGDaq8lff8rrmFpFgzbazub3myPPSruiquBI5lI/tzVhFQHg9Kx\nIlVPAoFI+mtc7HNIq6hmy0taUgRE0BcFRDHfp/Ead1dVExZNWkO2unRu7UiXbKKu\nauidKXBJEYrCY/0PQ8ee9uEYosPkeY9Ie418u9PkoGCRmGwLRAnY+q4QhATJABC6\ns0vn/WUOUTz4g6uDGv5aVp6faw7WEPNm8OEWI67uyWyMNAbDOg/YL+AThf+cJhOA\nGXygJEQvROpUyFdwmgIoajGd14Kwep9UK7N/CPuKJHqlq7vwJbFKoJJFG+i+Euv5\nsVrJECxouhpvM6BnuXM98iGTK1BCfizeFsTKaH7YkO0gNlTbrw9uID9p4AdiqtcT\nxYs/NeEUo/9UmJG4/VNcoLFECPgjLU6hJXf/k7eDxFeBHiIJkfUYcon+wc5E4hlx\nh+tHwg/kabAO+tOKFW+b11zEYkHgvTWIpfoOlJX0AspDlp+8K1yen7KyTTriN77z\nLkx/oMMS/1Wr8/sVcSP5aMeH8/MlGNx90h4ZODpd/tr/uSFl/5u/Zd+XIUzt8kb5\nywVP55KbfhkvQhUT5JqdHDaMwPGMfi+NItJKEkOsST3HLOl0YCJYWhhCjs5/r98A\nj3VbmHo+CYfYANVVfE51\n=Mwwl\n-----END PGP SIGNATURE-----", + "payload": "tree da701a3cb6a8425ff3c8a711179dec717152b68e\nparent a086566be615785960e23c4fa98528886fbcbd3b\nauthor Sam Roberts 1479414283 -0800\ncommitter Anna Henningsen 1479793019 +0100\n\ndoc: describe when a tls server emits 'close'\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "html_url": "https://github.com/nodejs/node/commit/f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/f43e47aab2bc400a5bfdf4ff162a8484e3559630/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a086566be615785960e23c4fa98528886fbcbd3b", + "url": "https://api.github.com/repos/nodejs/node/commits/a086566be615785960e23c4fa98528886fbcbd3b", + "html_url": "https://github.com/nodejs/node/commit/a086566be615785960e23c4fa98528886fbcbd3b" + } + ] + }, + { + "sha": "c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YzE4Y2ExNTkzZTRhYTViMTlkZjY3MTQ3ZWUwNDhiMWJhODYyZWQxNw==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-17T20:25:52Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:00Z" + }, + "message": "doc: fix tls \"the the\" typo\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "90990204b539e9dfe98aa6c7aaf41620dcadef6a", + "url": "https://api.github.com/repos/nodejs/node/git/trees/90990204b539e9dfe98aa6c7aaf41620dcadef6a" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l8AAoJENi59a6uhOTP0/kP/3wDj94ZEBsAdW7xbcIIbWl3\ny0s7B+0oTDeFwxQeSzEG2iCQxKkWS0Z/fxXkD4nWUOtzBpDpHcuFVT+fUqinWmpk\nU3B86gja2otfZh3PeGKWmAeKYAA19BoKpvdvfi8J3L35Ggutex2tyFbC9u31fTqo\nITYY38XZqirUhFVF0XJFmox3zZd64x0uVigPTghYJPQmJj07g4IvPf5qdvWIXgJD\n/tdi9L1y5cb9ZblrkkUcq8aavbpYEa9cWDUywPKWxgixZ3IaUBNRMvyZf2D1x4EK\noyDdtPdbYCVtRMSw2rfCD3GnZ7zJ2+SXk8z0MgqQZ7kLmJyAPYdXY+OoBbMva3RZ\nwvmCwYXGIxbFjheZSW068iiwVjIX5t2y9oypTbNx/D19tayzC5+jBZzJ6BB7pEuu\ni07NRC0vj+ieZRB8cVefyWArLcLrW9c0DDuAbh+lwFdcDrCys9O9fgcT5qIg7833\nUeIZYIlmnAzYNohj7jmXePlBsQv7VeL/X0CamTNOyONLCue1/xfuGmAQuRzyzdK1\nBu3wA0NAiltYVwQrsMYo6hPSDWFRwy5CpliQCEAhiiBePbHdwCHgT0/9qfuCmdGO\nJP7aa+Qu1ylndR3JyqM/mIKELke/ZT5Lczr8e9BIqy3Ow2z5r8g1L8zmHOek6f/0\nH8PETcfKu3x24j2/gKl8\n=Grxi\n-----END PGP SIGNATURE-----", + "payload": "tree 90990204b539e9dfe98aa6c7aaf41620dcadef6a\nparent f43e47aab2bc400a5bfdf4ff162a8484e3559630\nauthor Sam Roberts 1479414352 -0800\ncommitter Anna Henningsen 1479793020 +0100\n\ndoc: fix tls \"the the\" typo\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "html_url": "https://github.com/nodejs/node/commit/c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/c18ca1593e4aa5b19df67147ee048b1ba862ed17/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "url": "https://api.github.com/repos/nodejs/node/commits/f43e47aab2bc400a5bfdf4ff162a8484e3559630", + "html_url": "https://github.com/nodejs/node/commit/f43e47aab2bc400a5bfdf4ff162a8484e3559630" + } + ] + }, + { + "sha": "16819d29b05cf7422b7250e740dac2ceadb73df4", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTY4MTlkMjliMDVjZjc0MjJiNzI1MGU3NDBkYWMyY2VhZGI3M2RmNA==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-17T21:01:39Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:00Z" + }, + "message": "doc: fix \"either as either\" typo\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "8318ed8f6438fe5ea1da9907c847aa460c41a1d9", + "url": "https://api.github.com/repos/nodejs/node/git/trees/8318ed8f6438fe5ea1da9907c847aa460c41a1d9" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/16819d29b05cf7422b7250e740dac2ceadb73df4", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l8AAoJENi59a6uhOTPSkMQAKuFuLI3OnwjyCIiEaVdPKU+\nJkB+tlI9c6mWk/GoXNE6ioY7G4CzinP1ntZ4R40ShClGmUP3w7V2l22TqHORUS+e\nGUMtptu8rqadNOT5gkceR/tGbd+IdAc2ftdCOumrbJM1uzjWq6ChsT3T74zn5gtF\nmLZs8/BrEjYxMckSiKLC7y3Jt3OlP9TPRBf4+0eh1JsT8DxdC7aFxoIuC58vzO1Z\nkSWeNWEFYS7rqWGMmNTbYc6Y/zMxBzHLvBbrT22Dd3o1dPXjYA8WlTNp2MozVTpE\nIr0eKYHtCENkEWbPZTzDAaz/zJSvGk3+N6a8nIujm9XI4rt2upc5fV3wi4qfe/aP\nmn+qpQbdT03sBgyC2KM3bAWTwqgUoHOnbnS+kG9rHUgyfZzOdsFi1owlbEpfkvtO\nEkr61l9YSHC8N19O7Xoz8+8Icuq1TZM21Ehvgo/beXlrGfeZ/KylTHtMQxUj47uK\nB2Mqq6Z9LFVkb1KCq7WUzal4ztSk7Y+81POwIxgudAc+eCDiLGnQmvYADpvrNfZC\nFUZfI+QiIuIG9iT9c1O+e8zk/KDK+I6zhRlwQA+IH+5CFZnO5kO4rkK68cwlOJp4\nkfQ4mK0Xe/UOhKf0li0Std8tkmoceCXiU1oLOG1Pn+ExXbjgvieFh3cfxnDYH/IA\nrnn1s5qGaGyxKq69zOi3\n=S8Or\n-----END PGP SIGNATURE-----", + "payload": "tree 8318ed8f6438fe5ea1da9907c847aa460c41a1d9\nparent c18ca1593e4aa5b19df67147ee048b1ba862ed17\nauthor Sam Roberts 1479416499 -0800\ncommitter Anna Henningsen 1479793020 +0100\n\ndoc: fix \"either as either\" typo\n\nPR-URL: https://github.com/nodejs/node/pull/9665\nReviewed-By: Roman Reiss \nReviewed-By: Michael Dawson \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Brian White \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/16819d29b05cf7422b7250e740dac2ceadb73df4", + "html_url": "https://github.com/nodejs/node/commit/16819d29b05cf7422b7250e740dac2ceadb73df4", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/16819d29b05cf7422b7250e740dac2ceadb73df4/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "url": "https://api.github.com/repos/nodejs/node/commits/c18ca1593e4aa5b19df67147ee048b1ba862ed17", + "html_url": "https://github.com/nodejs/node/commit/c18ca1593e4aa5b19df67147ee048b1ba862ed17" + } + ] + }, + { + "sha": "8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OGJmNDJiNGVjNGZjMjk4YjY5NjdlNmE3YmMzNjJiOGFmYzlkMThiYg==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-15T17:56:15Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:01Z" + }, + "message": "doc: strip trailing whitespace\n\nPR-URL: https://github.com/nodejs/node/pull/9620\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell ", + "tree": { + "sha": "28217913a8cf9fd4eeb325fb59ade66f31c77cbe", + "url": "https://api.github.com/repos/nodejs/node/git/trees/28217913a8cf9fd4eeb325fb59ade66f31c77cbe" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l9AAoJENi59a6uhOTPiXsP/2JSFkbm83BMSqywDCGyCRXO\nu2i2zmeahI+yV/6pUdbY/S2ulocov1NE5h81xXqhXqZJEXiXhN7j/8P+nMSac0ez\n8aWarAqqw0RmJuwcCYiUksdDqngB0aD73hStq/sBwxnWeRudJbWwi1LB58LhMcpW\nJY5DoH5o3CkNh8cs4Ul2lourO/4C0ldRJwT0YQbpNqeb3Lhy7kv/F6ji0lph9dew\nZWL+FuYWcfMFt5plzjXhgdHqzEDftJdmB2hICRiMSqy9iYq3L5w2l5sBQ36My4GF\n9MIn90YGwmw4GpHuvgXw4ZRC3JwxHNMu9XW2g5QVR1d26LBswguTdZOXWQeoeSS6\nRW6hlJPbj2JytwBig2+XKm7pMGb9Lan9ul88MjGMUmAcM2uuBZNr1kUY+Ld/yR6r\nnapa0cYRBjK781cngUUnbBBi4mxQicXGE4rs2faMYsZJ97bpSeC/aCb3EPsOwQvy\naSEwec9aOSCfnfHg1hspauyFbttguyrbYmvFKI/kl8DuZ03MHuYBZ0RV4JUm8WFR\nEhcVfDUsRxF7wMoXsKm5roegKvFqjM2u3IPqSgJ9vTsptGAMe+8DH5NNb9TWt7JL\n7UljG+wr0ALvH0hIUM7v0KjPP7DRK7dMmzGk4z+AXr6bY+9LstztwDiExJU0nKoJ\nUUhknGDodCDicgunJbNT\n=2FMr\n-----END PGP SIGNATURE-----", + "payload": "tree 28217913a8cf9fd4eeb325fb59ade66f31c77cbe\nparent 16819d29b05cf7422b7250e740dac2ceadb73df4\nauthor Sam Roberts 1479232575 -0800\ncommitter Anna Henningsen 1479793021 +0100\n\ndoc: strip trailing whitespace\n\nPR-URL: https://github.com/nodejs/node/pull/9620\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "html_url": "https://github.com/nodejs/node/commit/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "16819d29b05cf7422b7250e740dac2ceadb73df4", + "url": "https://api.github.com/repos/nodejs/node/commits/16819d29b05cf7422b7250e740dac2ceadb73df4", + "html_url": "https://github.com/nodejs/node/commit/16819d29b05cf7422b7250e740dac2ceadb73df4" + } + ] + }, + { + "sha": "776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6Nzc2ZDI5MWEwN2E4ZjJmZDEzOWQzYWJhNGMxZDMzYjg2YzA5ZWQ4ZQ==", + "commit": { + "author": { + "name": "Bethany Griggs", + "email": "Bethany.Griggs@uk.ibm.com", + "date": "2016-11-15T11:14:16Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:01Z" + }, + "message": "test: run tests even if os.cpus() fails\n\nCurrently if the os.cpus() call fails every test will fail. As there is\nalready a test for os.cpus(), the other tests should run even if the\nos.cpus() call fails.\n\nPR-URL: https://github.com/nodejs/node/pull/9616\n\nReviewed-By: Gibson Fahnestock \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Evan Lucas \nReviewed-By: Ben Noordhuis \nReviewed-By: James M Snell ", + "tree": { + "sha": "3a723c4cdaef4140e8d0207427365ceabc4cef56", + "url": "https://api.github.com/repos/nodejs/node/git/trees/3a723c4cdaef4140e8d0207427365ceabc4cef56" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l9AAoJENi59a6uhOTPJxcQALFZOOXsNNmn54ky3NDM6F44\nAOA84m8YFaUnvYNaZPogkhZM+VmwsO5gD40U924iBxTerzxvPv50h1FAzvwR0AOS\ndDtTvaugcc2K6bKMkhBKfivnPl7a7mS6DRnqzBMQmIc4RWvfsEgGKoE1aJ1F1lWq\nZ9/mVP0K6m7oCfqNbmbnP8+YmBJuQ2ugEl+7+pelKO9yxkn1YiFa/5evg5zHSC0I\n/buN3Cql2FaOSPLGPsBurdpNvVPEZzIm7qID5Pazwc+IjVklZ0Zj3V7i1kx5xCd4\nVFpuRFp4YVrrKne22qvkk75Q7LCmyYQwpyR00ujKUtCaUaK1QNN3JiZqZv7BX+WT\n+3JfVNXySjQvcuTMa+LCQ3QD7wILZ5X+VfdGzoPK4E0oa6LwxGwClCrPyNBaxKha\nzHJk+FBwTXHDP89WOFdRotIx1cT9JH7ZI9CHWmdPWadyDPvl/ZgDS8aheDLwvOBw\nPDavspbdCZkXLbROpWeEHWi/qvRz+PE79a7H4TUGOU3t0Hogyaez7zdTYGFM/+6c\nZnAHZjGAPqjxoKNG5IRCUNbS/PBmQhOqYvvUjZ7nIHy2l91nn8PxTYNY3ZMwmZry\nZyvWfwjpU7BXIi8X7MWcwc29d9znBVQN904s2sZ8QP2mMoVMqY9asd4LpaM9Cois\nGZPJl91o98r+8dPylVzx\n=iM+j\n-----END PGP SIGNATURE-----", + "payload": "tree 3a723c4cdaef4140e8d0207427365ceabc4cef56\nparent 8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb\nauthor Bethany Griggs 1479208456 +0000\ncommitter Anna Henningsen 1479793021 +0100\n\ntest: run tests even if os.cpus() fails\n\nCurrently if the os.cpus() call fails every test will fail. As there is\nalready a test for os.cpus(), the other tests should run even if the\nos.cpus() call fails.\n\nPR-URL: https://github.com/nodejs/node/pull/9616\n\nReviewed-By: Gibson Fahnestock \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: Evan Lucas \nReviewed-By: Ben Noordhuis \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "html_url": "https://github.com/nodejs/node/commit/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e/comments", + "author": { + "login": "BethGriggs", + "id": 8297234, + "node_id": "MDQ6VXNlcjgyOTcyMzQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/8297234?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/BethGriggs", + "html_url": "https://github.com/BethGriggs", + "followers_url": "https://api.github.com/users/BethGriggs/followers", + "following_url": "https://api.github.com/users/BethGriggs/following{/other_user}", + "gists_url": "https://api.github.com/users/BethGriggs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BethGriggs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BethGriggs/subscriptions", + "organizations_url": "https://api.github.com/users/BethGriggs/orgs", + "repos_url": "https://api.github.com/users/BethGriggs/repos", + "events_url": "https://api.github.com/users/BethGriggs/events{/privacy}", + "received_events_url": "https://api.github.com/users/BethGriggs/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "url": "https://api.github.com/repos/nodejs/node/commits/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb", + "html_url": "https://github.com/nodejs/node/commit/8bf42b4ec4fc298b6967e6a7bc362b8afc9d18bb" + } + ] + }, + { + "sha": "425a8646e22daeaad2982885fd62c0d5f967c2a4", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NDI1YTg2NDZlMjJkYWVhYWQyOTgyODg1ZmQ2MmMwZDVmOTY3YzJhNA==", + "commit": { + "author": { + "name": "Italo A. Casas", + "email": "italo@italoacasas.com", + "date": "2016-11-18T18:17:16Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:02Z" + }, + "message": "doc: add italoacasas to collaborators\n\nPR-URL: https://github.com/nodejs/node/pull/9677\nReviewed-By: Rich Trott \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "6c109830837c7201701c9282d2c31b57620c7d9c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6c109830837c7201701c9282d2c31b57620c7d9c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/425a8646e22daeaad2982885fd62c0d5f967c2a4", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l+AAoJENi59a6uhOTPgM4P/iqsTKuUAw78SXFTO48MRsdV\n0a4g9D3McN1SIXYxXtkzIS2kO/fgSaF/E8mbh60sLb3dL/GJCJwvTRjPcZ9Dkqdn\nyHx3cnUYtPehUOPxctwJV2UUgY2B3qlCYvPCouaMx7c7FpojtAsD8k5ca6EFwlBM\nzFP/idr84vaD4xMZH+p9rKgKBA3MmHXuyHinlZVVcv3cM7XOORAlMhjCwbohUD51\nZidMHRd01MMx82q693AuoWSkdtJEYO3w3ooAIthNdI5ZviGUspPfGmH+2mokhcB0\nb1aE3da+avOhFP6vfOAucGvQTFKD/7jNPGoMBOTj5AveGhZyx+iYsC04SGMiFxrS\neqdGaRgiF1JHB/5kKsUKupM09TYmU4LPYEnIheC/8tLsJYSq6ufhiy4UBvzxgzJo\nHIUHCde4RYOz+Wn9i7W1ZiamKQLP7qWwGFHnL1Y0Exp+/64QxPbKrIYw0r56VB4N\ntkdjhLynUAEmAlz/QNxTDRqfu17KdDoDVM5Vv5HLHqQk0CUE0uEtQPFBWVFVWMTs\nPAcGX53iYjhqfgEd520V9DfmZq+0xJQQAf5e8P/F2L9DS4hDVPrgs+E4DMEf5wiI\ni98IFNycBz8qMGFVeHOOngw5Xs+kV44gtK5MZknpRUooyrxP0ElX7vrkmtCIm5aA\nTbsdmm6BzRMyNITNNnHr\n=mTbO\n-----END PGP SIGNATURE-----", + "payload": "tree 6c109830837c7201701c9282d2c31b57620c7d9c\nparent 776d291a07a8f2fd139d3aba4c1d33b86c09ed8e\nauthor Italo A. Casas 1479493036 -0500\ncommitter Anna Henningsen 1479793022 +0100\n\ndoc: add italoacasas to collaborators\n\nPR-URL: https://github.com/nodejs/node/pull/9677\nReviewed-By: Rich Trott \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/425a8646e22daeaad2982885fd62c0d5f967c2a4", + "html_url": "https://github.com/nodejs/node/commit/425a8646e22daeaad2982885fd62c0d5f967c2a4", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/425a8646e22daeaad2982885fd62c0d5f967c2a4/comments", + "author": null, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "url": "https://api.github.com/repos/nodejs/node/commits/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e", + "html_url": "https://github.com/nodejs/node/commit/776d291a07a8f2fd139d3aba4c1d33b86c09ed8e" + } + ] + }, + { + "sha": "a29be5282eeea8f49b18255a484af4b628eaff9f", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YTI5YmU1MjgyZWVlYThmNDliMTgyNTVhNDg0YWY0YjYyOGVhZmY5Zg==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-17T21:00:00Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:02Z" + }, + "message": "test: fix memory leaks in malloc cctests\n\nMake cctest valgrind-clean again by freeing heap-allocated memory.\nOverlooked in commit ea94086 (\"src: provide allocation + nullptr check\nshortcuts.\")\n\nPR-URL: https://github.com/nodejs/node/pull/9667\nRefs: https://github.com/nodejs/node/pull/8482\nReviewed-By: Anna Henningsen \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Santiago Gimeno ", + "tree": { + "sha": "7fdbf82e3ddfe746aa8b02206f02dc6576fcf805", + "url": "https://api.github.com/repos/nodejs/node/git/trees/7fdbf82e3ddfe746aa8b02206f02dc6576fcf805" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/a29be5282eeea8f49b18255a484af4b628eaff9f", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9l+AAoJENi59a6uhOTPnhUP/2/UYppsiUPEO0gXNlb3ZO1m\n0irZ2N/2ovnrq7jVpMv95LKL2DPxPOMgr0G/NoBcbYOaTCZZ81JtHbKpyG9n6vi4\nrMlwxhG5yvPi3UIiDaCR7hcmTkfGz2xaypoIYeKvmqqjnhJ11p7ozWcQhh0vdMuo\nRBF24LCQWUhvgpN140HYtn8evE0QLd3zMdjytUoGwf8I3Ks/U/8mx5a6lLMPDzxb\n3paoUF1y2fX2+NEelKzfuZXPYUMNaTJ73f1/3UwW210lBTA8gJuV0PAPGi3dWkVE\ndSgM+RzUr0uQeBRXFVG69rRABMIkWmHvnFtABl2XR8t1HYdxn5wz9rtcwRbHpVI1\nKYvtyDSzpqWU21Id46oGAPZz1Ilu14gv30wJ5xZRK8fhIsbiURN5YbTIik1/HMz0\nok6iZbbymup8pIFDVLzcqnTLhorRe8XQ9UVTYXA5Nwc1HhqKQ8XMQu+CkvVgBD9G\nJ6PJwpn+b78IQJ5hrkLy5NL5K0i3rRSk5j7EG2BlYF9FnuPJIZgjcUH52/h8uOtB\nua/k3XC8M1LyjqMvB4XyhkOSkvQs0KjBN9yquKwb3senynuhoKjW5+ylRoJAJeea\nlv+xhum5n86N/rgCtEet4bHaQrJQCT6Vn99BXVqEKh0anWDSBRG0WOtUUyEYPpsd\nSrNLhykvLFFdvnuMhkdq\n=GerH\n-----END PGP SIGNATURE-----", + "payload": "tree 7fdbf82e3ddfe746aa8b02206f02dc6576fcf805\nparent 425a8646e22daeaad2982885fd62c0d5f967c2a4\nauthor Ben Noordhuis 1479416400 +0100\ncommitter Anna Henningsen 1479793022 +0100\n\ntest: fix memory leaks in malloc cctests\n\nMake cctest valgrind-clean again by freeing heap-allocated memory.\nOverlooked in commit ea94086 (\"src: provide allocation + nullptr check\nshortcuts.\")\n\nPR-URL: https://github.com/nodejs/node/pull/9667\nRefs: https://github.com/nodejs/node/pull/8482\nReviewed-By: Anna Henningsen \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Santiago Gimeno \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/a29be5282eeea8f49b18255a484af4b628eaff9f", + "html_url": "https://github.com/nodejs/node/commit/a29be5282eeea8f49b18255a484af4b628eaff9f", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/a29be5282eeea8f49b18255a484af4b628eaff9f/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "425a8646e22daeaad2982885fd62c0d5f967c2a4", + "url": "https://api.github.com/repos/nodejs/node/commits/425a8646e22daeaad2982885fd62c0d5f967c2a4", + "html_url": "https://github.com/nodejs/node/commit/425a8646e22daeaad2982885fd62c0d5f967c2a4" + } + ] + }, + { + "sha": "b258a70a407c7956ba1d817d73a6a34df07b7239", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YjI1OGE3MGE0MDdjNzk1NmJhMWQ4MTdkNzNhNmEzNGRmMDdiNzIzOQ==", + "commit": { + "author": { + "name": "imatvieiev", + "email": "idmatvieiev@gmail.com", + "date": "2016-11-16T20:52:05Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:32Z" + }, + "message": "doc: add return types and props types to OS module\n\nPR-URL: https://github.com/nodejs/node/pull/9648\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \nReviewed-By: Prince John Wesley \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "131d1471cd8126cf69f4be341571b5dbc046ae96", + "url": "https://api.github.com/repos/nodejs/node/git/trees/131d1471cd8126cf69f4be341571b5dbc046ae96" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/b258a70a407c7956ba1d817d73a6a34df07b7239", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mcAAoJENi59a6uhOTPPoUP/0h8OIlHu8ZAv2qGKZKZxggN\n3IOkLopEQMNFDZyweF+67tiVqqhsfKdyTSfXo2abJm9Q7pUCTXuXuBATUUWmE2j1\nI9gQKmCN+Wo3DqNo8TlteuSFbvOiyX6EEjRPpLzu0FYGyW9qmS1A5hXjOwxx91qn\n9X91QqNuRJMpRR7zj/XcWADrmtr3iYa4gq+wdxmJftiPVDRqvOW4/M6cSDeo9rrh\n3N0TEGbYtayyTcaK6gnQcV3Z7x4fKST5y/5aKtndMEccXJH6A3+oUCtDoQvDAPQR\naXe/Ra6yQ1FXIPgiROt02QLnQTBUiF/pVsgVUPKVx6aUlGHyHQnwNTYroPE+SV0Z\nt5xH+f/ZiBAjjJdHwV0tGtvWu/xwcLWaSMn4dqJwHkmV2/48nka9CWT9CG36S1iY\nXfxxNEPQR7b6d9gM8uwfXNX3nWhRcENnUZDf71O+d1FOLlxmqSKuNbNl5QOQAnt/\n9Mn8B1ehiZi1djUdYq9aVVL967bMFiYwXHATjYTcnCQl/0iLJG2361oGHm42ILkM\nQqQR/eiXut+RFFWGXOULxibH8dEAnCaxygQD3hefZfqBUkFkWSg1BOuALjUUN2n1\nW9yVuuXhMjj/X9Lo2AJV9LkWMwb85SUY5aIFc2bPGZVtgq/Dwhsmfoc6vceLWwwR\nYKHcW1c3Nc2j7qjNGb1s\n=HEKw\n-----END PGP SIGNATURE-----", + "payload": "tree 131d1471cd8126cf69f4be341571b5dbc046ae96\nparent a29be5282eeea8f49b18255a484af4b628eaff9f\nauthor imatvieiev 1479329525 +0200\ncommitter Anna Henningsen 1479793052 +0100\n\ndoc: add return types and props types to OS module\n\nPR-URL: https://github.com/nodejs/node/pull/9648\nReviewed-By: Roman Reiss \nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \nReviewed-By: Prince John Wesley \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/b258a70a407c7956ba1d817d73a6a34df07b7239", + "html_url": "https://github.com/nodejs/node/commit/b258a70a407c7956ba1d817d73a6a34df07b7239", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/b258a70a407c7956ba1d817d73a6a34df07b7239/comments", + "author": { + "login": "imatveev", + "id": 10616396, + "node_id": "MDQ6VXNlcjEwNjE2Mzk2", + "avatar_url": "https://avatars.githubusercontent.com/u/10616396?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/imatveev", + "html_url": "https://github.com/imatveev", + "followers_url": "https://api.github.com/users/imatveev/followers", + "following_url": "https://api.github.com/users/imatveev/following{/other_user}", + "gists_url": "https://api.github.com/users/imatveev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/imatveev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/imatveev/subscriptions", + "organizations_url": "https://api.github.com/users/imatveev/orgs", + "repos_url": "https://api.github.com/users/imatveev/repos", + "events_url": "https://api.github.com/users/imatveev/events{/privacy}", + "received_events_url": "https://api.github.com/users/imatveev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a29be5282eeea8f49b18255a484af4b628eaff9f", + "url": "https://api.github.com/repos/nodejs/node/commits/a29be5282eeea8f49b18255a484af4b628eaff9f", + "html_url": "https://github.com/nodejs/node/commit/a29be5282eeea8f49b18255a484af4b628eaff9f" + } + ] + }, + { + "sha": "c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6Yzk5ZmIxZTBkMjcxNjVmMzBlYzljMzU4MTA1ODdiY2VkNWIyYTgwYQ==", + "commit": { + "author": { + "name": "JungMinu", + "email": "jmwsoft@gmail.com", + "date": "2016-11-15T02:29:15Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:33Z" + }, + "message": "doc: remove invalid padding from privateEncrypt\n\nPR-URL: https://github.com/nodejs/node/pull/9611\nFixes: https://github.com/nodejs/node/issues/9609\nReviewed-By: Claudio Rodriguez \nReviewed-By: Sam Roberts \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "d194bf93de670d9a01e2b9e88db3c9bae56c1fd8", + "url": "https://api.github.com/repos/nodejs/node/git/trees/d194bf93de670d9a01e2b9e88db3c9bae56c1fd8" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mdAAoJENi59a6uhOTPYsgQAIEI7HoIfJ+5HTQlI0dPUjuj\nBahCWfZ+RmL3ivXdALx4s80oKnTSYn9rdqFhhXlVMjByhpkdQUjnZRGP/oV7E94t\n3XMVGFBRwBDaVn+vYskg+2k/13VRsGBa8hn/e4KLztHGovLaN24Y9epp+mPcCpJ0\nCQHtGmYx8UUBlRRta78ZS//ilFIu9c5syga19eR6yE06B3jFK5C29geVJ/HytQUL\nibyuPA0EVnM/PPrubV77dnPOqMWJH5fVoZKzB1fY30WTij34Dmh5OU2uIX2Zw3ug\npfprj0jFVcLTtWW0KwcRHm079OzZtagPwbhzcV6KclbO9zKr0KY49XH2OyTrZyFY\nvmM9QZsAWm3a06vhY6AVHYWjSOOqOq3GlkoOMg/W2qNVPtVwV5gtBfXxC1CeUKVz\nyf5k0nDVKU8w+4wGuO0fg1p1IeMmKdcqnBEvA17Fy/IlCi5/2WW6lRLMdSbuiTER\nO6Gd65+ocuSjNBmKUWzxMrEyUIlc3eLjUc+HUhfnl6uw2GVojFahhlvaAD44twsQ\nw0eLSP6f9Q9hBgVuFjakUSlOTh97HUwJcWqJ2GpRh8R4A7D3fTeNV+Msk0CMfIcK\ncKJ4upZyVn3sm6qRSGVzLTlt6KQey4KzuX6KUoK34KHkmdZwNvde6JK9nTuV3Zje\nBMqcnc8Jb63SkXeSC5J/\n=106k\n-----END PGP SIGNATURE-----", + "payload": "tree d194bf93de670d9a01e2b9e88db3c9bae56c1fd8\nparent b258a70a407c7956ba1d817d73a6a34df07b7239\nauthor JungMinu 1479176955 +0900\ncommitter Anna Henningsen 1479793053 +0100\n\ndoc: remove invalid padding from privateEncrypt\n\nPR-URL: https://github.com/nodejs/node/pull/9611\nFixes: https://github.com/nodejs/node/issues/9609\nReviewed-By: Claudio Rodriguez \nReviewed-By: Sam Roberts \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "html_url": "https://github.com/nodejs/node/commit/c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/c99fb1e0d27165f30ec9c35810587bced5b2a80a/comments", + "author": { + "login": "JungMinu", + "id": 5035902, + "node_id": "MDQ6VXNlcjUwMzU5MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/5035902?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JungMinu", + "html_url": "https://github.com/JungMinu", + "followers_url": "https://api.github.com/users/JungMinu/followers", + "following_url": "https://api.github.com/users/JungMinu/following{/other_user}", + "gists_url": "https://api.github.com/users/JungMinu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JungMinu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JungMinu/subscriptions", + "organizations_url": "https://api.github.com/users/JungMinu/orgs", + "repos_url": "https://api.github.com/users/JungMinu/repos", + "events_url": "https://api.github.com/users/JungMinu/events{/privacy}", + "received_events_url": "https://api.github.com/users/JungMinu/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "b258a70a407c7956ba1d817d73a6a34df07b7239", + "url": "https://api.github.com/repos/nodejs/node/commits/b258a70a407c7956ba1d817d73a6a34df07b7239", + "html_url": "https://github.com/nodejs/node/commit/b258a70a407c7956ba1d817d73a6a34df07b7239" + } + ] + }, + { + "sha": "69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NjlmZmUwY2Y4Y2Q5MzZkZDZiNjRhMTI0NDliOWI3Y2Y4MDA5M2YxZQ==", + "commit": { + "author": { + "name": "Kenneth Skovhus", + "email": "kenneth.skovhus@gmail.com", + "date": "2016-11-16T18:06:15Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:33Z" + }, + "message": "doc: child_process .stdio accepts a String type\n\nDocument that `execFileSync`, `execSync` and `spawnSync` also support\n`stdio` as an Array.\n\nPR-URL: https://github.com/nodejs/node/pull/9637\nFixes: https://github.com/nodejs/node/issues/9636\nReviewed-By: Jeremiah Senkpiel \nReviewed-By: Colin Ihrig \nReviewed-By: Sam Roberts \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "efe792d5ba76d6a648a3eb3977abe7de5c06b148", + "url": "https://api.github.com/repos/nodejs/node/git/trees/efe792d5ba76d6a648a3eb3977abe7de5c06b148" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mdAAoJENi59a6uhOTPsPAP/04TcEI37gHStI+n/MBCjTyx\nrUi19Z2+KS1xnLobzBCKc7cojNrmcFl/IE4x9CviFGQxAMNGnvD9HbEW2h4ncYyb\nSx73dS0r5IulMIK7kE1OHuycVXesQPLYjvY00A8MsxjuPI7pWvb8pN9uD/XaU6qS\n8nLWVX3+YpmUh6meDp+77caOaV4CYtfXOhKNDlEF1f4F1sBXCFDGTyZIt4B0VBtr\nMDUoRRwIytJvDQHbeL7SzJa//c1QSO1g+YCYPNHzApppnTaMpE66j+ji84BcwhpO\nBntehUbsFsppMIN8dw3rgnImRZVC5J5mtBTQf/bvqGYGg2AgsVLzho/tvpGfA3xJ\nyifVyqHPpz6IeT1TPoFGT03X6hyZIx6a6ZftqgZFOnEtWkKpYKo2jWr4p7OxhqNC\nxGYfdbu+3/iqWObBYSHPFSqR/uga5lnK2vI/K6K/jvCLRImH/Q3NxkB1IOaLpNWi\nWa206Z1lU7PwWYhFjqOxgYNR9oUHr44Q09HxkGaqefIYBeSiukfqytllrZdVpvv/\nAmdjFtqnuut0HPcr+TcrrzTXV1eLAgzpWELoDGxZ+yqHVHD0OdMjirMpWgQcvM+N\ne6ngCvYXdV4qrXQsBLp9HLaAyCy3cq2EysTO4YWWaF/pUYQ4dDW9z8CfwMnneKnF\nkruUivRZQD8Tek5m9e1z\n=ZBm5\n-----END PGP SIGNATURE-----", + "payload": "tree efe792d5ba76d6a648a3eb3977abe7de5c06b148\nparent c99fb1e0d27165f30ec9c35810587bced5b2a80a\nauthor Kenneth Skovhus 1479319575 +0100\ncommitter Anna Henningsen 1479793053 +0100\n\ndoc: child_process .stdio accepts a String type\n\nDocument that `execFileSync`, `execSync` and `spawnSync` also support\n`stdio` as an Array.\n\nPR-URL: https://github.com/nodejs/node/pull/9637\nFixes: https://github.com/nodejs/node/issues/9636\nReviewed-By: Jeremiah Senkpiel \nReviewed-By: Colin Ihrig \nReviewed-By: Sam Roberts \nReviewed-By: James M Snell \nReviewed-By: Roman Reiss \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "html_url": "https://github.com/nodejs/node/commit/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e/comments", + "author": { + "login": "skovhus", + "id": 1260305, + "node_id": "MDQ6VXNlcjEyNjAzMDU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1260305?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skovhus", + "html_url": "https://github.com/skovhus", + "followers_url": "https://api.github.com/users/skovhus/followers", + "following_url": "https://api.github.com/users/skovhus/following{/other_user}", + "gists_url": "https://api.github.com/users/skovhus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skovhus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skovhus/subscriptions", + "organizations_url": "https://api.github.com/users/skovhus/orgs", + "repos_url": "https://api.github.com/users/skovhus/repos", + "events_url": "https://api.github.com/users/skovhus/events{/privacy}", + "received_events_url": "https://api.github.com/users/skovhus/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "url": "https://api.github.com/repos/nodejs/node/commits/c99fb1e0d27165f30ec9c35810587bced5b2a80a", + "html_url": "https://github.com/nodejs/node/commit/c99fb1e0d27165f30ec9c35810587bced5b2a80a" + } + ] + }, + { + "sha": "731a1fa602969900eda4ab3ea6fb18778e0cc698", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NzMxYTFmYTYwMjk2OTkwMGVkYTRhYjNlYTZmYjE4Nzc4ZTBjYzY5OA==", + "commit": { + "author": { + "name": "Aaron Petcoff", + "email": "hello@aaronpetcoff.me", + "date": "2016-11-17T20:32:27Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:34Z" + }, + "message": "test: Use strictEqual in test-tls-writewrap-leak\n\nPR-URL: https://github.com/nodejs/node/pull/9666\nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Michaël Zasso \nReviewed-By: Colin Ihrig \nReviewed-By: Sakthipriyan Vairamani \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "f16bd0d49d0e92111e21027de95746667b5e31d6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/f16bd0d49d0e92111e21027de95746667b5e31d6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/731a1fa602969900eda4ab3ea6fb18778e0cc698", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9meAAoJENi59a6uhOTPhk4P+gPfRKc21bv0BSu8vIosH8HM\n/ViU3uEfoTgxG+TchapGXAtOPcFCw6du8xpJkMBj5rSHdmyIlYG7R8Q0QUmUYljG\nZaYCW+d9KvXYFJBkYD9w4fDG9YdzxQap7CuKK0iv/pWIlLVlGDoFId8pfJ+FgtP7\n3lZJmlIr+kDjvwTBCYbm04u/4FxfzSlu5zy1YGszphodrRO917fXZp8pSexguGtk\nQAmxdFXke9Y73Bf1h/C8/zppVxH9hhKpZkLjPH0RKXTkw8HYw+Q/3AC8Q2CfzQSN\n3k1xFKhtUX2UQXnu8Zpv9sjFnMHFDGSddQDcIWgyY5D6aqvEBKLaHN1ba3PkwnLu\nPDKAUf2lZyjP6FHVaSfBLr/H2s/oXyydZR99dsiFHFAp+KWKZjoUQU2wR6Av6blG\n+L3ePZDwY3c15WVbnLl4fLAi86zliZgYWvN/ph3OR+3fuZYMxjiqMFMcaXK6aJD/\nIKYWOxiwaAKyv9rRlIcP+0o0h7PIW2cJ5HzlIl5/NbLsuJgo6rh7wadc3PCDxKQ8\nPNpTecfaINejDW7kcQs4jYn+bG44SOGKqZCmywTs2aPCtbOua/R3n2nXkuEMIpxk\nY/0zuw1nA0zSMcAEDyuwzt+OmbBMlkmM5wYMH0EMI75VZT5Q9cTxuaFKVkC1wwP+\nwfynRCWhIvWdV1azDOCm\n=dAOz\n-----END PGP SIGNATURE-----", + "payload": "tree f16bd0d49d0e92111e21027de95746667b5e31d6\nparent 69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e\nauthor Aaron Petcoff 1479414747 -0500\ncommitter Anna Henningsen 1479793054 +0100\n\ntest: Use strictEqual in test-tls-writewrap-leak\n\nPR-URL: https://github.com/nodejs/node/pull/9666\nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: Michaël Zasso \nReviewed-By: Colin Ihrig \nReviewed-By: Sakthipriyan Vairamani \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/731a1fa602969900eda4ab3ea6fb18778e0cc698", + "html_url": "https://github.com/nodejs/node/commit/731a1fa602969900eda4ab3ea6fb18778e0cc698", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/731a1fa602969900eda4ab3ea6fb18778e0cc698/comments", + "author": { + "login": "ughitsaaron", + "id": 5301535, + "node_id": "MDQ6VXNlcjUzMDE1MzU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5301535?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ughitsaaron", + "html_url": "https://github.com/ughitsaaron", + "followers_url": "https://api.github.com/users/ughitsaaron/followers", + "following_url": "https://api.github.com/users/ughitsaaron/following{/other_user}", + "gists_url": "https://api.github.com/users/ughitsaaron/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ughitsaaron/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ughitsaaron/subscriptions", + "organizations_url": "https://api.github.com/users/ughitsaaron/orgs", + "repos_url": "https://api.github.com/users/ughitsaaron/repos", + "events_url": "https://api.github.com/users/ughitsaaron/events{/privacy}", + "received_events_url": "https://api.github.com/users/ughitsaaron/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "url": "https://api.github.com/repos/nodejs/node/commits/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e", + "html_url": "https://github.com/nodejs/node/commit/69ffe0cf8cd936dd6b64a12449b9b7cf80093f1e" + } + ] + }, + { + "sha": "d62376c8d6ef771426d92321d850f370f0ef3ef0", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZDYyMzc2YzhkNmVmNzcxNDI2ZDkyMzIxZDg1MGYzNzBmMGVmM2VmMA==", + "commit": { + "author": { + "name": "Vse Mozhet Byt", + "email": "vsemozhetbyt@gmail.com", + "date": "2016-11-15T23:41:14Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:34Z" + }, + "message": "doc: small improvements in readline code examples\n\n1. Consistent template literals in `console.log()`.\n2. === instead of ==.\n3. const instead of var.\n\nPR-URL: https://github.com/nodejs/node/pull/9628\nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Jackson Tian ", + "tree": { + "sha": "6129d4b541b1e5e2df8991189ccdff2e795fcc34", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6129d4b541b1e5e2df8991189ccdff2e795fcc34" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/d62376c8d6ef771426d92321d850f370f0ef3ef0", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9meAAoJENi59a6uhOTPxCcQAJFf+tt9o+nuIddXapXPsDWC\nyQVtcj/2J96/RujotDd5r4kUVkHUz7mTt/0SZvnfXEdP0xkK5lt6MemxRvS3vULZ\n/SVg9qE0MljxuiZql5grYXjJmaLWSENztIbamkVTbLwdjb5Pi28zV974n1o4TO59\n/KEJBCOlut1WedH4xUW8y2fSRywH879W3B4d6loWJEb0YVbjsvKEcVYjJ4uI/tV6\nYqsxYmRXYISDd2tZqqc7GxpgMKTVTqXHkOBepcFcfgjLK++fIz//Wj7/Atn4r+v1\n5dy+Q6vmY+w4H7REhirctp2y7s6Kado9q+6jlh7YlahIn8HzljaABS3e8KlgwOMz\nSc4E6yunTMccGi4DCeIyZLyHa2xUnEtbmBS6EhJkriwENcSgLEDQewv/umRvxlCN\nkGRjop8bg50mREYbbw6XdUyp9zMFq1vYfLs8gfemSgIuJn8gIqT9d0FvyxBPF5zU\nv3Zc4mcNdpdjCbOVWA+pHw70lhcIN39PVW6xmVsVX69uYHDqqiGCmKvkRVEcblXw\nTCutsSPvS74O9W+oz0TStLG/7m0HVN705kAc3YOO5b60/mJbU27jWNVFjM/iUo5K\nI1qzJy74yTN8kcGBiHWmH1DzFYNJeBqEbIL+yCXdwV781frz0n1kj8e5VHAOKczU\nTqPPyoj2w5kJLt2JWNrA\n=haTA\n-----END PGP SIGNATURE-----", + "payload": "tree 6129d4b541b1e5e2df8991189ccdff2e795fcc34\nparent 731a1fa602969900eda4ab3ea6fb18778e0cc698\nauthor Vse Mozhet Byt 1479253274 +0200\ncommitter Anna Henningsen 1479793054 +0100\n\ndoc: small improvements in readline code examples\n\n1. Consistent template literals in `console.log()`.\n2. === instead of ==.\n3. const instead of var.\n\nPR-URL: https://github.com/nodejs/node/pull/9628\nReviewed-By: Colin Ihrig \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Jackson Tian \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/d62376c8d6ef771426d92321d850f370f0ef3ef0", + "html_url": "https://github.com/nodejs/node/commit/d62376c8d6ef771426d92321d850f370f0ef3ef0", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/d62376c8d6ef771426d92321d850f370f0ef3ef0/comments", + "author": { + "login": "vsemozhetbyt", + "id": 10393198, + "node_id": "MDQ6VXNlcjEwMzkzMTk4", + "avatar_url": "https://avatars.githubusercontent.com/u/10393198?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vsemozhetbyt", + "html_url": "https://github.com/vsemozhetbyt", + "followers_url": "https://api.github.com/users/vsemozhetbyt/followers", + "following_url": "https://api.github.com/users/vsemozhetbyt/following{/other_user}", + "gists_url": "https://api.github.com/users/vsemozhetbyt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vsemozhetbyt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vsemozhetbyt/subscriptions", + "organizations_url": "https://api.github.com/users/vsemozhetbyt/orgs", + "repos_url": "https://api.github.com/users/vsemozhetbyt/repos", + "events_url": "https://api.github.com/users/vsemozhetbyt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vsemozhetbyt/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "731a1fa602969900eda4ab3ea6fb18778e0cc698", + "url": "https://api.github.com/repos/nodejs/node/commits/731a1fa602969900eda4ab3ea6fb18778e0cc698", + "html_url": "https://github.com/nodejs/node/commit/731a1fa602969900eda4ab3ea6fb18778e0cc698" + } + ] + }, + { + "sha": "159799aa1d40d54a5ea0915f5a058369a7147f0b", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTU5Nzk5YWExZDQwZDU0YTVlYTA5MTVmNWEwNTgzNjlhNzE0N2YwYg==", + "commit": { + "author": { + "name": "Rahat Ahmed", + "email": "rahatarmanahmed@gmail.com", + "date": "2016-11-15T19:56:03Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:35Z" + }, + "message": "doc: improve description of urlObject.query\n\nThe description of urlObject.query is ambiguous about when it's an\nobject vs when it's a string. Added a sentence pointing to the option\nthat determines this in url.parse().\n\nAlso fixed the missing parentheses in the first sentence by rewording it to\navoid nested parentheses.\n\nPR-URL: https://github.com/nodejs/node/pull/9625\nReviewed-By: Rich Trott \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso ", + "tree": { + "sha": "aa32e2836bfea5b2c8a3a41900ca5a23ea1ba2dc", + "url": "https://api.github.com/repos/nodejs/node/git/trees/aa32e2836bfea5b2c8a3a41900ca5a23ea1ba2dc" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/159799aa1d40d54a5ea0915f5a058369a7147f0b", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mfAAoJENi59a6uhOTPN7MQAKtivtYm1qrJnyLZwa0jCBLX\nCwnPORGqO9jpD+855b+lyb/2oOiZ7Cwg/RLgAvLz6UC3gWpZONffoAjKVifXtzkX\nPTAcrYGKSOpnxP+EZFuQUINxJ2P382DkWUGdaIsQjjTjV+oPxpOWRLKhcKA3M8/H\nAugnIIhtH6rayy6tLldnnuylsUcQCGTrdWbvcu/crxZ7xaURkB3r1PyLambWhH/W\nkfk5L9Pd6CUeKQGkuhIW6VSu5GMbGisuPX5DDsoqtza5PFQYK1IoCflRLDRoXdjW\nWoC5oXe3aGttdGhdQFbyzylS3Qgs91Qxouhfh29vLdXxeFR6sei5Oofy1ECjr25G\nYqhNXiO0/85PLdNrMKw+OVWWscvTmprdy35RR7BUsPq6wfpYJYc+kXhzI7QWeGI3\n8Cgg96PD6yslU4MPk/U6Gnk+t1I8Wswed0u4NONlf9Xtdz8FYTwhvhWnjfhpXoH5\n5/LQ5N8rENiyPYgLtnMc1n7LtEh8YYrVFJQzJo7Kj0c81Gq0EWoUR72PJ0UXuBoR\nSxZIccZhqAxxZ7GlwyegE4EoYf7VNrv8C/MMpZbLigqGBorBpwttY8J6D0Kf770/\n0Cb4KbQMWlx+fUjKRcXNsr9/GmGA5G05JxhuQmiziLPclYpQQ2LhDksBcghIkqrT\nWRgWtneJmUGejy5Cwgg0\n=afXK\n-----END PGP SIGNATURE-----", + "payload": "tree aa32e2836bfea5b2c8a3a41900ca5a23ea1ba2dc\nparent d62376c8d6ef771426d92321d850f370f0ef3ef0\nauthor Rahat Ahmed 1479239763 -0600\ncommitter Anna Henningsen 1479793055 +0100\n\ndoc: improve description of urlObject.query\n\nThe description of urlObject.query is ambiguous about when it's an\nobject vs when it's a string. Added a sentence pointing to the option\nthat determines this in url.parse().\n\nAlso fixed the missing parentheses in the first sentence by rewording it to\navoid nested parentheses.\n\nPR-URL: https://github.com/nodejs/node/pull/9625\nReviewed-By: Rich Trott \nReviewed-By: Colin Ihrig \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/159799aa1d40d54a5ea0915f5a058369a7147f0b", + "html_url": "https://github.com/nodejs/node/commit/159799aa1d40d54a5ea0915f5a058369a7147f0b", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/159799aa1d40d54a5ea0915f5a058369a7147f0b/comments", + "author": { + "login": "rahatarmanahmed", + "id": 3174006, + "node_id": "MDQ6VXNlcjMxNzQwMDY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3174006?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rahatarmanahmed", + "html_url": "https://github.com/rahatarmanahmed", + "followers_url": "https://api.github.com/users/rahatarmanahmed/followers", + "following_url": "https://api.github.com/users/rahatarmanahmed/following{/other_user}", + "gists_url": "https://api.github.com/users/rahatarmanahmed/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rahatarmanahmed/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rahatarmanahmed/subscriptions", + "organizations_url": "https://api.github.com/users/rahatarmanahmed/orgs", + "repos_url": "https://api.github.com/users/rahatarmanahmed/repos", + "events_url": "https://api.github.com/users/rahatarmanahmed/events{/privacy}", + "received_events_url": "https://api.github.com/users/rahatarmanahmed/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d62376c8d6ef771426d92321d850f370f0ef3ef0", + "url": "https://api.github.com/repos/nodejs/node/commits/d62376c8d6ef771426d92321d850f370f0ef3ef0", + "html_url": "https://github.com/nodejs/node/commit/d62376c8d6ef771426d92321d850f370f0ef3ef0" + } + ] + }, + { + "sha": "6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NmM2M2FiN2M5YTYyOGMxNWNjZDlkMzA1MjI5MDdiMGFiNGM1ODczMg==", + "commit": { + "author": { + "name": "Rod Vagg", + "email": "rod@vagg.org", + "date": "2016-11-17T00:20:27Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:35Z" + }, + "message": "test: simplify test-http-client-unescaped-path\n\nPR-URL: https://github.com/nodejs/node/pull/9649\nReviewed-By: Trevor Norris \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca \nReviewed-By: Michaël Zasso \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "be2d5e8a73d5ccef15b5c6a78b11bfd17f929c6e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/be2d5e8a73d5ccef15b5c6a78b11bfd17f929c6e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mfAAoJENi59a6uhOTPGacQAIlJb2sGaxmbe7yny8wEEFIm\nRDsYXvCqj33/l6E++8nysDrG9k9QTcjGPB6BGaJSCfEb7X8zxKDpxqcRioXD/Ok+\nxL+Xt1LpaVaM+/rSJ1Diyqzc4bcKhCGm/sG8zl1ir6guSISk/24vDWccIIpzatYW\n4NGMd8akl6OPq9w/KJoDchSdtBGeu8rpps0cfbXJ2qees5DxHO+UMODHeVWbJTHT\nTXcg8bUpPBQy6s+oyuHoejy7ev9EXDuTRf6EMthYVcd/n3edxbU2EpTZILTh+GT+\nu+wDVqnAr/GUW5sLfbPg62mvdvHOLFLeI78ClzO9fW4A9gZu/GWRca5LvZp8yGdq\novuvUrZq8zP1+xjBj4UbO1vxf1RWtJXkyrtooAV7lGvesGG1rZY1LB0j4sKic3Am\nfN5UEcT8N/irPRBT4NJTl6uYWWchpgqisuNJwbCt7B1QJ+zlO9WNSYqnCxA9L2Tq\nklBTr+eaosS513Z0k1An2ZZHk+nYbcuEG0/WrTGrYdRUqbV2G8C7VXwi36zDlrhK\nPxvE6odwJrAPKkRjeVL1GqQBa0+j/+MGrHXRhuozLwp194Pjk5P7rzTampXR/UqR\nQQkzcOAlQ6SMvKckBRcKAfgXskOQ2gpJKERoSBNbjAS1haQXY90I+w5lRwq5KeDT\nQcha7Y4rTU0xiaLjmgFD\n=yEbA\n-----END PGP SIGNATURE-----", + "payload": "tree be2d5e8a73d5ccef15b5c6a78b11bfd17f929c6e\nparent 159799aa1d40d54a5ea0915f5a058369a7147f0b\nauthor Rod Vagg 1479342027 +1100\ncommitter Anna Henningsen 1479793055 +0100\n\ntest: simplify test-http-client-unescaped-path\n\nPR-URL: https://github.com/nodejs/node/pull/9649\nReviewed-By: Trevor Norris \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca \nReviewed-By: Michaël Zasso \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "html_url": "https://github.com/nodejs/node/commit/6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/6c63ab7c9a628c15ccd9d30522907b0ab4c58732/comments", + "author": { + "login": "rvagg", + "id": 495647, + "node_id": "MDQ6VXNlcjQ5NTY0Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/495647?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rvagg", + "html_url": "https://github.com/rvagg", + "followers_url": "https://api.github.com/users/rvagg/followers", + "following_url": "https://api.github.com/users/rvagg/following{/other_user}", + "gists_url": "https://api.github.com/users/rvagg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rvagg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rvagg/subscriptions", + "organizations_url": "https://api.github.com/users/rvagg/orgs", + "repos_url": "https://api.github.com/users/rvagg/repos", + "events_url": "https://api.github.com/users/rvagg/events{/privacy}", + "received_events_url": "https://api.github.com/users/rvagg/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "159799aa1d40d54a5ea0915f5a058369a7147f0b", + "url": "https://api.github.com/repos/nodejs/node/commits/159799aa1d40d54a5ea0915f5a058369a7147f0b", + "html_url": "https://github.com/nodejs/node/commit/159799aa1d40d54a5ea0915f5a058369a7147f0b" + } + ] + }, + { + "sha": "29bf87197798c9433689f0e358514f28ee1dc423", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MjliZjg3MTk3Nzk4Yzk0MzM2ODlmMGUzNTg1MTRmMjhlZTFkYzQyMw==", + "commit": { + "author": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-16T01:58:40Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:36Z" + }, + "message": "tools: use better regexp for manpage references\n\nIn practice, manpage names may contain dots (e.g. `resolv.conf(5)`).\n\nPR-URL: https://github.com/nodejs/node/pull/9632\nReviewed-By: Ben Noordhuis \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "74d1aaf1eaf933c72ee58c18e4ba5f2ea8bd29e0", + "url": "https://api.github.com/repos/nodejs/node/git/trees/74d1aaf1eaf933c72ee58c18e4ba5f2ea8bd29e0" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/29bf87197798c9433689f0e358514f28ee1dc423", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mgAAoJENi59a6uhOTPs8YP/A0dMeOYixSbJJoI6oUNa8CP\nWMcvmsXrsAN9cu11ZVzMhyHwgUPa/HmZGLbtjg2ihPh1ouoeeXEOqltDimkFvv50\nYgb9C96Fq/ISGcCzyIs5sgBmUeqJUCQ5IPd3wqC5huCNNpVvUtMdGsjK3C6Ldrr1\nNjk/wL06CATSYS/g+swA/d88ENczWJe6GHqlTTYGidAYKWF/rl7IDhEw/wmgQfYZ\n6UZbjQgEFwVs+Epp6XEkWkrmgHvuKSmNDiaRDHrmiW8zXgV3kWXzpxsCxOdHGTUS\nZLHvZToeVIAD5a8TlroW2vCVuGVA+OofMSVzV+VREpbxT3Nr7X2BncklbYEiGfvh\nJl5jXBNO1RV5zZWu3rfSZijdAkBkU0KjWOAEyEz5mhjjz7przAHmqWdcMoWQ64Qv\nKyF4J6IcTXfkp5T82kRPeruuW7YqpPz1cIUt75XEiz0JaihbLuZP9XAnfM6x46E8\nozh9AdYRW8zDmraBbIy6XC0wWq661TcmcQlZEUiDvvXrscuDBtV0RgiDN/lWjQu9\nO3UMnzoIpazphVJ+BXd59deK6hIyILQyWiG1PcblnuUBO8AMWalDrQ1K4jGAB8DX\n0C9i+G1OK7kPTOXCWoGVJXGmsEXOUpocNw6kwake/+2/qNcStuZOoOOsLVVX0sI4\n5Uo6qNaL6ro8cyIjN92r\n=9Gt3\n-----END PGP SIGNATURE-----", + "payload": "tree 74d1aaf1eaf933c72ee58c18e4ba5f2ea8bd29e0\nparent 6c63ab7c9a628c15ccd9d30522907b0ab4c58732\nauthor Anna Henningsen 1479261520 +0100\ncommitter Anna Henningsen 1479793056 +0100\n\ntools: use better regexp for manpage references\n\nIn practice, manpage names may contain dots (e.g. `resolv.conf(5)`).\n\nPR-URL: https://github.com/nodejs/node/pull/9632\nReviewed-By: Ben Noordhuis \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/29bf87197798c9433689f0e358514f28ee1dc423", + "html_url": "https://github.com/nodejs/node/commit/29bf87197798c9433689f0e358514f28ee1dc423", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/29bf87197798c9433689f0e358514f28ee1dc423/comments", + "author": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "url": "https://api.github.com/repos/nodejs/node/commits/6c63ab7c9a628c15ccd9d30522907b0ab4c58732", + "html_url": "https://github.com/nodejs/node/commit/6c63ab7c9a628c15ccd9d30522907b0ab4c58732" + } + ] + }, + { + "sha": "39f04829d6bcd360c89871d2a2b95746f4fe9620", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzlmMDQ4MjlkNmJjZDM2MGM4OTg3MWQyYTJiOTU3NDZmNGZlOTYyMA==", + "commit": { + "author": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-16T02:00:30Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:36Z" + }, + "message": "doc: remove backtick escaping for manpage refs\n\nRemoving backticks will make the doctool emit links to the man pages.\n\nPR-URL: https://github.com/nodejs/node/pull/9632\nReviewed-By: Ben Noordhuis \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "6aaf24fb42eb4b704f60935184a22c8c308657c8", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6aaf24fb42eb4b704f60935184a22c8c308657c8" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/39f04829d6bcd360c89871d2a2b95746f4fe9620", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mgAAoJENi59a6uhOTPyuIQAJ+6ajgbNsDdoryKkjJd6T8c\n2Wg2H3t8Z4eTVHmYOM3ptkV3t7xTLuUAFK4jR8PWrJI4qixd+azXE8gMOciEVWiH\n3XASYjU3fMQ7caRUNj+rRNapvUam0hzc8ZviybOMA2TULwRCoymTH+B6oqGfITEg\n2E2F8c3SV8IqMbi5zmK9xwEfzkGwTmJ4S7it9EK7SwgdBLd5k6V0R9XudFLiBjUj\nKVas9TFTVOtVSezKQpmPjFL/+CiipwpoZgwGYDEHiQbgjj6NG5kQS+bGKAumdUA2\n3KR1tHBJWvpsrkg6HzSXxj56HJnKzVIHZ0Cni0doRjySNcd9CrRiJC15cLdGBhvp\nEYPstl8WoFP1irMENsIkuH/M4RIgQpgdN0Nl9kc2BENeVXakWY8kkBnqX7zsgyzr\n/VLuAxuxPRTgvaNZtb+hpLYSn1Xqm0kjjgqQG+IWEdKvEWVb9hXfVPUer/VOD8tB\nHyilL1jirYIkC+0G+yxL/uSMylfXzhm0YN0Q0zUpQ8xbxYBGYvvgCUnRd2M7tfes\nzIKAxKYOq38zIHAgEhsfWcsDGTyvcrdIqAJ+1sVKFwKv9hSryxXfA5s0aRNS+00v\n8ss8kO03U0GnAeS7jPPQMbbCFpYxgfqzHamWy9b4ylsl9QLRge3GEnWwenyfRfaZ\n3EGnmXhkWzAfO5jNTTUt\n=TpWw\n-----END PGP SIGNATURE-----", + "payload": "tree 6aaf24fb42eb4b704f60935184a22c8c308657c8\nparent 29bf87197798c9433689f0e358514f28ee1dc423\nauthor Anna Henningsen 1479261630 +0100\ncommitter Anna Henningsen 1479793056 +0100\n\ndoc: remove backtick escaping for manpage refs\n\nRemoving backticks will make the doctool emit links to the man pages.\n\nPR-URL: https://github.com/nodejs/node/pull/9632\nReviewed-By: Ben Noordhuis \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Luigi Pinca \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/39f04829d6bcd360c89871d2a2b95746f4fe9620", + "html_url": "https://github.com/nodejs/node/commit/39f04829d6bcd360c89871d2a2b95746f4fe9620", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/39f04829d6bcd360c89871d2a2b95746f4fe9620/comments", + "author": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "29bf87197798c9433689f0e358514f28ee1dc423", + "url": "https://api.github.com/repos/nodejs/node/commits/29bf87197798c9433689f0e358514f28ee1dc423", + "html_url": "https://github.com/nodejs/node/commit/29bf87197798c9433689f0e358514f28ee1dc423" + } + ] + }, + { + "sha": "b070df89321a8cf258c4e4db3e31e4290a418bc2", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YjA3MGRmODkzMjFhOGNmMjU4YzRlNGRiM2UzMWU0MjkwYTQxOGJjMg==", + "commit": { + "author": { + "name": "monkick", + "email": "saruyama.monki@gmail.com", + "date": "2016-11-12T07:30:28Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:37:37Z" + }, + "message": "doc: fix typo in BUILDING.md\n\ne.g., to e.g. at BUILDING.md line 116\n\nPR-URL: https://github.com/nodejs/node/pull/9569\nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell ", + "tree": { + "sha": "a751bd9a93c9649c3990f876970765387a8ded2c", + "url": "https://api.github.com/repos/nodejs/node/git/trees/a751bd9a93c9649c3990f876970765387a8ded2c" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/b070df89321a8cf258c4e4db3e31e4290a418bc2", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9mhAAoJENi59a6uhOTP/wkP/2Jrk+kTLvgikGPq3WYyPePR\nc/3V7pqhZKx+ZZwP0wxCRInNJQt8EJ8r5KaLWSt7JfxxKku1ovLP//10tZnmkuTC\n3NQitcsUdReb5jttfYoo/z969OmUzBpOd4tC93oUl+tHMY967RzIHCsm7ebEeOCt\nKfq7KFCVtPhekJDnwFq6N1U/HE28zORtGWzoq947M2uRzycuL5AEnvAIfXL/D48k\nYMUMJWicSUCO8KJnCPuLfZWszL3toYTe1i8mTOCnojxzXBihf7RSiwnZuTWmKtMZ\n61hG0YaiuC3aDlWzVnnTlPh7T3PIhv1t5nts+TnpBjrOqcwnxAD/5eg1JiURjKgW\nL0Xz1581DcOWQZ8mGHs+cQmRCuaItXV+Gz9mV6gfOa7v6EpaCd+3ss+L4c51V0X5\nQtfBGX/JE/yV7TSJMa/GPlNLDddSFv9AGDoAITpJ5FxZSiK7ZZbIggRvjHbzmUVY\nSU6zcJbG6VkNAPh0vtkAQgLsW6OhVfFswzL1ZS1F+9S/p4P5hd5hmb+qAgXyYKGt\nu9CJetnFeMRo0F8xL3jABUuLVRjojGhbMVfDYuy9vNJjJ9PoJiJw+zlS/gpFkP6g\n9RFpB03D1VLS0FMOiAbPuFE88BR3r8XPqNYTQzdItJwuXRZgoDeczX24J3hhdTY2\nCowK+cpoefoHh9UlG1ly\n=JU4H\n-----END PGP SIGNATURE-----", + "payload": "tree a751bd9a93c9649c3990f876970765387a8ded2c\nparent 39f04829d6bcd360c89871d2a2b95746f4fe9620\nauthor monkick 1478935828 +0900\ncommitter Anna Henningsen 1479793057 +0100\n\ndoc: fix typo in BUILDING.md\n\ne.g., to e.g. at BUILDING.md line 116\n\nPR-URL: https://github.com/nodejs/node/pull/9569\nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu \nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/b070df89321a8cf258c4e4db3e31e4290a418bc2", + "html_url": "https://github.com/nodejs/node/commit/b070df89321a8cf258c4e4db3e31e4290a418bc2", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/b070df89321a8cf258c4e4db3e31e4290a418bc2/comments", + "author": { + "login": "kazu80", + "id": 4590559, + "node_id": "MDQ6VXNlcjQ1OTA1NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/4590559?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kazu80", + "html_url": "https://github.com/kazu80", + "followers_url": "https://api.github.com/users/kazu80/followers", + "following_url": "https://api.github.com/users/kazu80/following{/other_user}", + "gists_url": "https://api.github.com/users/kazu80/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kazu80/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kazu80/subscriptions", + "organizations_url": "https://api.github.com/users/kazu80/orgs", + "repos_url": "https://api.github.com/users/kazu80/repos", + "events_url": "https://api.github.com/users/kazu80/events{/privacy}", + "received_events_url": "https://api.github.com/users/kazu80/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "39f04829d6bcd360c89871d2a2b95746f4fe9620", + "url": "https://api.github.com/repos/nodejs/node/commits/39f04829d6bcd360c89871d2a2b95746f4fe9620", + "html_url": "https://github.com/nodejs/node/commit/39f04829d6bcd360c89871d2a2b95746f4fe9620" + } + ] + }, + { + "sha": "08a7e7b009f041c008399749b33937aaf78ea1b4", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MDhhN2U3YjAwOWYwNDFjMDA4Mzk5NzQ5YjMzOTM3YWFmNzhlYTFiNA==", + "commit": { + "author": { + "name": "Kirill Fomichev", + "email": "fanatid@ya.ru", + "date": "2016-11-01T12:24:31Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:01Z" + }, + "message": "crypto: return `this` in setAuthTag/setAAD\n\nAllow method chaining as with setAutoPadding and other methods.\n\nPR-URL: https://github.com/nodejs/node/pull/9398\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Sam Roberts \nReviewed-By: Luigi Pinca \nReviewed-By: Brian White \nReviewed-By: James M Snell ", + "tree": { + "sha": "df49d77faedb17756bed9f943766f37bfbf0877e", + "url": "https://api.github.com/repos/nodejs/node/git/trees/df49d77faedb17756bed9f943766f37bfbf0877e" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/08a7e7b009f041c008399749b33937aaf78ea1b4", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m5AAoJENi59a6uhOTPJ5UP/1WfBBoiIRYzj8GADSxI9QLf\n8jIAxj3GRuF3VfORcrhtvZCKZ19ZG4YPLmV2cL6SL5UAGspEWsla70dQ2XVr2r62\nbONBqpkH/+YBxyp4l5WprBDYsyh7Vj2quGU1egkNIQ28TVAqmTygRpHUR/Cg7eWP\nUdzYA4duBRRHcYFRY85MDBn/4E3Z6z/q5CvCiY3qcWWnMO+/Kleo8aLekzhZlclK\naHGWjPhJfW4yQaIlceWnq/c5qEkaivL4N7GEdG24E7GEJpR+eI0ANDFSuKWwJjLz\nqN61GqZg4Zzp7B33yFR3ygp/wCTBU3o69m1YnAPMt8JMNQU8DlJ3X12d4s7nO5pr\nQfKp6qE50cPS1fgHfOkvF92OmgR3M4lUnhVO7tOaJ+XvuU4XpVXxs+aEAwb4Yruz\nBJkSF4ZHY08z5IVF250WiUjwaDF595QTxdkRJ65z2cOBLKK9Rvn3pbZt0ingYRZl\nzBHfViPuFLKokXtmt9RIv1oeog2D3HRWQnktYRNT3qvZpwoy97yHpzsTMAfSigvl\nv+kAEnwQn1ad56uEOenufQZ7HD+uURHCB33BKrF7NEMnGbPuW9uys4jbvhvrf5xO\nRZQNugEdccK7n0LabK7Al1N44C/URs0lLMKUzVvioYOMNCZ0kEyOQ/TgVnDnl15a\nOdX62jzvZknCnvAp5Vc+\n=p3VH\n-----END PGP SIGNATURE-----", + "payload": "tree df49d77faedb17756bed9f943766f37bfbf0877e\nparent b070df89321a8cf258c4e4db3e31e4290a418bc2\nauthor Kirill Fomichev 1478003071 +0300\ncommitter Anna Henningsen 1479793081 +0100\n\ncrypto: return `this` in setAuthTag/setAAD\n\nAllow method chaining as with setAutoPadding and other methods.\n\nPR-URL: https://github.com/nodejs/node/pull/9398\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Sam Roberts \nReviewed-By: Luigi Pinca \nReviewed-By: Brian White \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/08a7e7b009f041c008399749b33937aaf78ea1b4", + "html_url": "https://github.com/nodejs/node/commit/08a7e7b009f041c008399749b33937aaf78ea1b4", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/08a7e7b009f041c008399749b33937aaf78ea1b4/comments", + "author": { + "login": "fanatid", + "id": 2633065, + "node_id": "MDQ6VXNlcjI2MzMwNjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/2633065?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fanatid", + "html_url": "https://github.com/fanatid", + "followers_url": "https://api.github.com/users/fanatid/followers", + "following_url": "https://api.github.com/users/fanatid/following{/other_user}", + "gists_url": "https://api.github.com/users/fanatid/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fanatid/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fanatid/subscriptions", + "organizations_url": "https://api.github.com/users/fanatid/orgs", + "repos_url": "https://api.github.com/users/fanatid/repos", + "events_url": "https://api.github.com/users/fanatid/events{/privacy}", + "received_events_url": "https://api.github.com/users/fanatid/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "b070df89321a8cf258c4e4db3e31e4290a418bc2", + "url": "https://api.github.com/repos/nodejs/node/commits/b070df89321a8cf258c4e4db3e31e4290a418bc2", + "html_url": "https://github.com/nodejs/node/commit/b070df89321a8cf258c4e4db3e31e4290a418bc2" + } + ] + }, + { + "sha": "4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NDUxNzI3NmM3NGRlNWQwN2I0Y2ZkZDFjZWU0Yjg1YTEwZDVlZTQ4OA==", + "commit": { + "author": { + "name": "Josh Gavant", + "email": "josh.gavant@outlook.com", + "date": "2016-11-14T23:22:48Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:02Z" + }, + "message": "src: fix method name, output format\n\n* add additional newline to HTTP GET JSON responses\n* SendTargentsListResponse -> SendListResponse\n\nPR-URL: https://github.com/nodejs/node/pull/9627\nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "b3deab187575cef331f01b4a8bd6da185c1d0691", + "url": "https://api.github.com/repos/nodejs/node/git/trees/b3deab187575cef331f01b4a8bd6da185c1d0691" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m6AAoJENi59a6uhOTP8zIP/1gOQpdv64nS1H4M5pWXSkgr\njPUp1EKbRpN4pg6RYEtTxzdtcDuPpLBA7u8G/uITKHdAmqZQy9UwkDeY2uJANdum\nRWlSHdO3Ggd6MrWYHVco9d1Do5nu+bDylBmnS0bAuORjSGruu+m0ZIiZ3s2kmo8G\nCJpENFPu8GMTjIAcnVZGeeU6cbQKTmSpjHG1xZnMel+fKKzlNaUgNul7XIwjtHIA\nzJa0JtmXaJOIZLKQ/h2s76C8Bd1+dI2ef9rwah6YLOHgON9oX1Wv5G6yx0n0j65y\nQtLvFpqiijCuSIYcYv+eji/gEjDk/K3aWt2hp2Pw0PkH/1fKJyieQSuGvSS1Zg3M\nbuMbzj/6arH519ZFfX0kayPllyupxSUBr1Hg+dESBCxOHGsjQDt1SBjOT3PfFERw\nuVBN4Wi+G8SD2B7lutcDRNcMH7amrYBCPoO17EegyPysSC8CJgay1JfvmqcKELPq\nPWgpdgDVyy8fZOxAB1ibG17Q8F8MqRJbDJmAqXzoPnvnEmAGuZmTvzQrRNfdu42U\nONP+cg9qUVACmsvNia4f9rKqc2IY1qiVUsf3u96LwAF5tTbtkQby4wRiSQMop9aD\nDspOMhnQjuDNTgVTmweaIJTeSI+G1MRoDiQApuSvjcty7CuSOBIfdLqpep/R6YYv\nvOpoBmVL4coTIzV7XYLo\n=6B/R\n-----END PGP SIGNATURE-----", + "payload": "tree b3deab187575cef331f01b4a8bd6da185c1d0691\nparent 08a7e7b009f041c008399749b33937aaf78ea1b4\nauthor Josh Gavant 1479165768 -0800\ncommitter Anna Henningsen 1479793082 +0100\n\nsrc: fix method name, output format\n\n* add additional newline to HTTP GET JSON responses\n* SendTargentsListResponse -> SendListResponse\n\nPR-URL: https://github.com/nodejs/node/pull/9627\nReviewed-By: James M Snell \nReviewed-By: Michaël Zasso \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "html_url": "https://github.com/nodejs/node/commit/4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/4517276c74de5d07b4cfdd1cee4b85a10d5ee488/comments", + "author": { + "login": "joshgav", + "id": 4421720, + "node_id": "MDQ6VXNlcjQ0MjE3MjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4421720?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joshgav", + "html_url": "https://github.com/joshgav", + "followers_url": "https://api.github.com/users/joshgav/followers", + "following_url": "https://api.github.com/users/joshgav/following{/other_user}", + "gists_url": "https://api.github.com/users/joshgav/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joshgav/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joshgav/subscriptions", + "organizations_url": "https://api.github.com/users/joshgav/orgs", + "repos_url": "https://api.github.com/users/joshgav/repos", + "events_url": "https://api.github.com/users/joshgav/events{/privacy}", + "received_events_url": "https://api.github.com/users/joshgav/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "08a7e7b009f041c008399749b33937aaf78ea1b4", + "url": "https://api.github.com/repos/nodejs/node/commits/08a7e7b009f041c008399749b33937aaf78ea1b4", + "html_url": "https://github.com/nodejs/node/commit/08a7e7b009f041c008399749b33937aaf78ea1b4" + } + ] + }, + { + "sha": "c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YzRmMzNiNDhmN2RiNDZhYTYwYmNmNGMxMjBlMDEyODBiNTlkYzE3Yg==", + "commit": { + "author": { + "name": "Gareth Ellis", + "email": "gareth.ellis@uk.ibm.com", + "date": "2016-09-17T09:52:26Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:02Z" + }, + "message": "src: extend `HeapStatistics` with new fields\n\nsrc: Add does_zap_garbage, malloced_memory and\npeak_malloced_memory to v8 HeapStatistics\n\nFollowing https://github.com/nodejs/code-and-learn/issues/56 I\nhave exposed does_zap_garbage to HeapStatistics.\nThe other fields, malloced_memory and peak_malloced_memory don't\nseem to be in the current version of v8 in master.\n\nPR-URL: https://github.com/nodejs/node/pull/8610\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "fe93b37ccb94f2c752b59e41452e0d556413bfbb", + "url": "https://api.github.com/repos/nodejs/node/git/trees/fe93b37ccb94f2c752b59e41452e0d556413bfbb" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m6AAoJENi59a6uhOTPmsAP/3HA2tmS/+8U2Z07RbgiCkR4\nLWulhhr0B5KIxP1lNxCzBQ+Vkzmojrmio9+irRlOlUlLbM9HRQyzYgSZaMnrsQs1\nMNvBgs77cwQ7AnAGunp6jY5lHao+qAMdUs2YydFH1yEDR90ydXEilr8VPCOvQjpV\n0SYWhTBCQ5Sn930KmPPDLOX/GNXsEqtsg45uosBF+q+0kivUwYzL/KqCY741Rz8V\nH0KOYv93oWu0FvAZyXepoknF5cLi1n0pjlWw2VV8wuywiPwChin7MBjiU2C7P2wL\nfeXsw85KNTha+9z/KRu7VY8Anh9EjRL1UZbY2RuzVn4sWU0Z4wwnOK6ClyOuZrpT\nT7Psl+nKXQWvpC6pXh6TY58dpMj8wnCHsRgVw1QEPTErE6appfrEq1b91S0cblvK\nnucQT/0RSzEB3TR9WN097WEZicNQjZtKeOKnw7AkLcttQumM8BOLwbPgLxYGoBfI\nV/eaZWMNGzE426hKv0Ja/nfNXCqrsybsIfg3595gRFSymAIScRmUa7EYNM45/M0l\nSgkJvc0elh3QVMTMo6R14GecA/1yn2Rz3cgkjfkZJ0amCxX8BPQSEhn11kKQG6jd\npxb6jzQtTzMYM7rSoPAQj47cpEoyYLf+vKB7DSfvWuxm+hncPvYJCOIv2t5OMiYt\nFsh7H2EKX0R804ZBxxhm\n=QvuR\n-----END PGP SIGNATURE-----", + "payload": "tree fe93b37ccb94f2c752b59e41452e0d556413bfbb\nparent 4517276c74de5d07b4cfdd1cee4b85a10d5ee488\nauthor Gareth Ellis 1474105946 +0100\ncommitter Anna Henningsen 1479793082 +0100\n\nsrc: extend `HeapStatistics` with new fields\n\nsrc: Add does_zap_garbage, malloced_memory and\npeak_malloced_memory to v8 HeapStatistics\n\nFollowing https://github.com/nodejs/code-and-learn/issues/56 I\nhave exposed does_zap_garbage to HeapStatistics.\nThe other fields, malloced_memory and peak_malloced_memory don't\nseem to be in the current version of v8 in master.\n\nPR-URL: https://github.com/nodejs/node/pull/8610\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Ben Noordhuis \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "html_url": "https://github.com/nodejs/node/commit/c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/c4f33b48f7db46aa60bcf4c120e01280b59dc17b/comments", + "author": { + "login": "gareth-ellis", + "id": 14981026, + "node_id": "MDQ6VXNlcjE0OTgxMDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/14981026?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gareth-ellis", + "html_url": "https://github.com/gareth-ellis", + "followers_url": "https://api.github.com/users/gareth-ellis/followers", + "following_url": "https://api.github.com/users/gareth-ellis/following{/other_user}", + "gists_url": "https://api.github.com/users/gareth-ellis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gareth-ellis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gareth-ellis/subscriptions", + "organizations_url": "https://api.github.com/users/gareth-ellis/orgs", + "repos_url": "https://api.github.com/users/gareth-ellis/repos", + "events_url": "https://api.github.com/users/gareth-ellis/events{/privacy}", + "received_events_url": "https://api.github.com/users/gareth-ellis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "url": "https://api.github.com/repos/nodejs/node/commits/4517276c74de5d07b4cfdd1cee4b85a10d5ee488", + "html_url": "https://github.com/nodejs/node/commit/4517276c74de5d07b4cfdd1cee4b85a10d5ee488" + } + ] + }, + { + "sha": "a220170861d62d7a488330896695ed7b4464a59e", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YTIyMDE3MDg2MWQ2MmQ3YTQ4ODMzMDg5NjY5NWVkN2I0NDY0YTU5ZQ==", + "commit": { + "author": { + "name": "Rich Trott", + "email": "rtrott@gmail.com", + "date": "2016-11-17T18:25:57Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:03Z" + }, + "message": "test: refactor test-async-wrap-*\n\n* `assert.equal()` -> `assert.strictEqual()`\n* add duration to `setTimeout()`\n\nPR-URL: https://github.com/nodejs/node/pull/9663\nReviewed-By: Ben Noordhuis \nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca \nReviewed-By: Prince John Wesley ", + "tree": { + "sha": "eade51729912df77f23d0293e8a513bb25271e09", + "url": "https://api.github.com/repos/nodejs/node/git/trees/eade51729912df77f23d0293e8a513bb25271e09" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/a220170861d62d7a488330896695ed7b4464a59e", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m7AAoJENi59a6uhOTP7E4P/2hEMXacFoXDIseiAqmI1wS+\nEB3HxqJys+MU6StpcKmfGnIvUoJj4NzJMKJ/ykO3lU1g+KPssgAV7jV1Vpf2lQre\noE8+GFsDE/aWxdU+IVX/ou+tWiOZBUouKPoZ79qnSs8Sp0DQoqAvb1AQrq9nXkj9\nBwALO8FlENjAgVlZwDdNPG+hTXQlU1moIfdm7/gIG/UrMtDgRaFj70WiHh0oUHL5\nj7xYzqPbDuIVLROHTPWz9NVyJd/E1NNIs8jPebwRLcbcdCW7CuiI+zhIeOD1d1or\nHQKq4bV2sDnCileEL/HB0bf/PGXaHfZiw33/wT2mGYOgbwelnrdRVtqGvqm6J7gd\nOzr1BOWhJhQtoo6yZaUjCKSwLXrBUgKZMP11vIbi5ld3zEsp2bBnsPsHc4dlx1+v\n0M/qHGAPpHWPd1yeEIyTjcx240ehG/jP8BNEyixKmIm4P9oOYFOnkE3SWKV03qIS\ncUUcTcpH8dhx4TCiZefkadIPWPBWxIBJMWRa3pYcUGiufNdfyo247hfzBYl17lrh\nOCw/oPxOz46EntX9QGADJCxSfTFu9UQtihVEbaAVRpGQmKGUp2PsGDXfF61HWogz\nWp5dfM6mjLVAtob/E4O4eYx0CYnDETPbLcN5NvHtcGk85uRbQig4BWkrHARdOJlt\nLMI143+B17FqSTp6hsUE\n=PNsu\n-----END PGP SIGNATURE-----", + "payload": "tree eade51729912df77f23d0293e8a513bb25271e09\nparent c4f33b48f7db46aa60bcf4c120e01280b59dc17b\nauthor Rich Trott 1479407157 -0800\ncommitter Anna Henningsen 1479793083 +0100\n\ntest: refactor test-async-wrap-*\n\n* `assert.equal()` -> `assert.strictEqual()`\n* add duration to `setTimeout()`\n\nPR-URL: https://github.com/nodejs/node/pull/9663\nReviewed-By: Ben Noordhuis \nReviewed-By: Colin Ihrig \nReviewed-By: Santiago Gimeno \nReviewed-By: James M Snell \nReviewed-By: Luigi Pinca \nReviewed-By: Prince John Wesley \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/a220170861d62d7a488330896695ed7b4464a59e", + "html_url": "https://github.com/nodejs/node/commit/a220170861d62d7a488330896695ed7b4464a59e", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/a220170861d62d7a488330896695ed7b4464a59e/comments", + "author": { + "login": "Trott", + "id": 718899, + "node_id": "MDQ6VXNlcjcxODg5OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/718899?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Trott", + "html_url": "https://github.com/Trott", + "followers_url": "https://api.github.com/users/Trott/followers", + "following_url": "https://api.github.com/users/Trott/following{/other_user}", + "gists_url": "https://api.github.com/users/Trott/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Trott/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Trott/subscriptions", + "organizations_url": "https://api.github.com/users/Trott/orgs", + "repos_url": "https://api.github.com/users/Trott/repos", + "events_url": "https://api.github.com/users/Trott/events{/privacy}", + "received_events_url": "https://api.github.com/users/Trott/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "url": "https://api.github.com/repos/nodejs/node/commits/c4f33b48f7db46aa60bcf4c120e01280b59dc17b", + "html_url": "https://github.com/nodejs/node/commit/c4f33b48f7db46aa60bcf4c120e01280b59dc17b" + } + ] + }, + { + "sha": "0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MDA4M2JmMjIzM2ZiN2M5ZTFmYTAwOWQ3YTZjMWY0YjMwYTc3YThiNQ==", + "commit": { + "author": { + "name": "Gibson Fahnestock", + "email": "gib@uk.ibm.com", + "date": "2016-11-16T16:02:57Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:03Z" + }, + "message": "build: default to ppc64 on AIX\n\nThe ./configure python script searches `gcc -dM -E -` for the ARCH\nflags. On AIX, gcc builds in 32 bit mode by default prior to gcc v6, so\nyou don't get the __PPC64__ flag unless you run `gcc -maix64 -dM -E -`.\n\nWe don't support ppc 32 bit for any OS, so always use ppc64 as the\nhost_arch.\n\nPR-URL: https://github.com/nodejs/node/pull/9645\n\nReviewed-By: Michael Dawson \nReviewed-By: James M Snell ", + "tree": { + "sha": "1b92fa9e55f2666b02a6a896fc1b63df33ce8b3f", + "url": "https://api.github.com/repos/nodejs/node/git/trees/1b92fa9e55f2666b02a6a896fc1b63df33ce8b3f" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m7AAoJENi59a6uhOTPuRsP/2qsWIN68zS25C/jUEH+lLA6\nygD80TSexqirERWxrUvIntJkH0AcfeZZeg/4tfxmQWlJyKKk+Q4NJhRqYUG1NuUk\ncGu8hCXnyzm8KC64ZCAA75DQwbhvWszrOm2juIGb/GKy/C9R2Lg6cTsPoe7c2sJ6\nO5oFCegQqiCd+sb8OXlHN7qoi6CAHSZb9WIf322ASFHE6UTlXYOa6P2nqr2uGgV6\nR91Gz9Djg+KhreiSPrkAuuV1jT5x3TdD2VARN1tUlLZrCc6PMKAytcwiuKnk39B/\nDyiNgPAgXzcG4SWCeFnrXssx6SC2ZPqpp5gNS/7x6e43pST/KQNni4n3e4L9GYRk\nusML10qX8NbZ8Wv6tOnZbN4O+h7vKggTNWTrukH1t0NoBg63zIK8oCMLwQlWh/qe\ny/04GGAndz6kOE0P9ZJ7qigRocyxLz5yE1DgbgayJ+E2oFzpPC07OvO45wxlDqSS\nKjoXtpCvMhliYs6VLAHZXjQfvonoSHUhbGcn93vP+qt8XEgzW9YPcr53E2vnf6wZ\ntm/zmpgJtcgaPOAYe7RJn4VwCpKMeReNwLOG/pRAIM1jjSr5ZTruo1iwVyZwV/PJ\neVv25qZ7DjCE9DD326VcMm/Cjg3I/9GEmn8hVIO/AH0Fq2HM+yLtYNcS8lUgZP2Q\nsq0RGBf1DpdkaCMmzDB2\n=hF1k\n-----END PGP SIGNATURE-----", + "payload": "tree 1b92fa9e55f2666b02a6a896fc1b63df33ce8b3f\nparent a220170861d62d7a488330896695ed7b4464a59e\nauthor Gibson Fahnestock 1479312177 +0000\ncommitter Anna Henningsen 1479793083 +0100\n\nbuild: default to ppc64 on AIX\n\nThe ./configure python script searches `gcc -dM -E -` for the ARCH\nflags. On AIX, gcc builds in 32 bit mode by default prior to gcc v6, so\nyou don't get the __PPC64__ flag unless you run `gcc -maix64 -dM -E -`.\n\nWe don't support ppc 32 bit for any OS, so always use ppc64 as the\nhost_arch.\n\nPR-URL: https://github.com/nodejs/node/pull/9645\n\nReviewed-By: Michael Dawson \nReviewed-By: James M Snell \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "html_url": "https://github.com/nodejs/node/commit/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5/comments", + "author": { + "login": "gibfahn", + "id": 15943089, + "node_id": "MDQ6VXNlcjE1OTQzMDg5", + "avatar_url": "https://avatars.githubusercontent.com/u/15943089?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gibfahn", + "html_url": "https://github.com/gibfahn", + "followers_url": "https://api.github.com/users/gibfahn/followers", + "following_url": "https://api.github.com/users/gibfahn/following{/other_user}", + "gists_url": "https://api.github.com/users/gibfahn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gibfahn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gibfahn/subscriptions", + "organizations_url": "https://api.github.com/users/gibfahn/orgs", + "repos_url": "https://api.github.com/users/gibfahn/repos", + "events_url": "https://api.github.com/users/gibfahn/events{/privacy}", + "received_events_url": "https://api.github.com/users/gibfahn/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a220170861d62d7a488330896695ed7b4464a59e", + "url": "https://api.github.com/repos/nodejs/node/commits/a220170861d62d7a488330896695ed7b4464a59e", + "html_url": "https://github.com/nodejs/node/commit/a220170861d62d7a488330896695ed7b4464a59e" + } + ] + }, + { + "sha": "7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6N2MxYTJmNTZmY2NkZjJkZjJhZWZiZjcyNTMzZTllNmEzMDdkY2YyMg==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-18T22:02:00Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:04Z" + }, + "message": "test: add new.target add-on regression test\n\nAdd a test that checks that new.target inheritance works when inheriting\nfrom a constructor defined in C++.\n\nPR-URL: https://github.com/nodejs/node/pull/9689\nRefs: https://github.com/nodejs/node/issues/9288\nRefs: https://github.com/nodejs/node/pull/9293\nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "d4c037be43a4f7b79306ff82b391ff3999ad89c6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/d4c037be43a4f7b79306ff82b391ff3999ad89c6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m8AAoJENi59a6uhOTP5rMQAJgG3ARsiB62p7869cqwMvId\nlw1sqgJuMrp7Kqw3YtPdMTyzbP9LSMTreEP3tljKsa/jQFa8Ci6d3W6DM5hyTQuP\n/HyXJBKHyd7PQbRtnXjIv2gKof9GtzgXgECSTU0EjbRsFyGKbxTHe12VGCNhEc7f\nMziJ3ZHbHdEuvi8tt6cd4fHDvhLPzI1jNUfCdafHhmj/a9qjhBfuakEoHrHsT20h\nYO7br1JlnuED7DgfEj4VVEo2WXIBC5LVH/FllvzoOVTD86gN92bQNKB0TL/JqTY/\nFkEd4YvvwPEFd17PhTzCR2TqbN1Vf8zA9GcAqHJ2Phj+e7dHpV3lGk9t855fjDYf\nrN8Fo4JlQxRGFE8w1we5QT+S/dYbugLhmLgSM3+nxeaMBjCdrvdA4jJJXIaiYA28\nRWXAWni7E6D7IN9uSXOUvk87buOk//qzHkpjHUsDAufUer+/jsLNKt+cC+OefLe1\nPe7kw3lYc6Z604qNg1LXtfBeByNzHnNXqhNqTMW6ne6rKD63XqfypyuiHbUZ6gd7\nA2FQ61VLd+njzcRpqoW43e8GTnmHcVn3LS1xDfQai9uCW+XlIK6ZZW6tlX0LvPP+\nOSFh/IbjU7qUy5J+JIeMj+7D1OpJu5nXNGhe+ehwqeGXqVcl7fl/WlXmaBEICamT\nLp4+6O0fLIJQPahsSbsi\n=r29w\n-----END PGP SIGNATURE-----", + "payload": "tree d4c037be43a4f7b79306ff82b391ff3999ad89c6\nparent 0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5\nauthor Ben Noordhuis 1479506520 +0100\ncommitter Anna Henningsen 1479793084 +0100\n\ntest: add new.target add-on regression test\n\nAdd a test that checks that new.target inheritance works when inheriting\nfrom a constructor defined in C++.\n\nPR-URL: https://github.com/nodejs/node/pull/9689\nRefs: https://github.com/nodejs/node/issues/9288\nRefs: https://github.com/nodejs/node/pull/9293\nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "html_url": "https://github.com/nodejs/node/commit/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "url": "https://api.github.com/repos/nodejs/node/commits/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5", + "html_url": "https://github.com/nodejs/node/commit/0083bf2233fb7c9e1fa009d7a6c1f4b30a77a8b5" + } + ] + }, + { + "sha": "19ca6cddcf7bf55d708db65e059089e2c2673e91", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTljYTZjZGRjZjdiZjU1ZDcwOGRiNjVlMDU5MDg5ZTJjMjY3M2U5MQ==", + "commit": { + "author": { + "name": "Sam Roberts", + "email": "vieuxtech@gmail.com", + "date": "2016-11-18T17:40:45Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:04Z" + }, + "message": "tools: disallow trailing whitespace for markdown\n\nmarkdown had a dispensation because 2 or more trailing spaces triggers a\nnew paragraph. There are no examples of that usage in Node, all trailing\nwhitespace found were mistakes, and the dispensation is now removed.\n\nSee: https://github.com/nodejs/node/pull/9620\nPR-URL: https://github.com/nodejs/node/pull/9676\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss \nReviewed-By: Michaël Zasso \nReviewed-By: Gibson Fahnestock ", + "tree": { + "sha": "1dcf1e0863d357228a9bdfebf3d0d4bc2f865f82", + "url": "https://api.github.com/repos/nodejs/node/git/trees/1dcf1e0863d357228a9bdfebf3d0d4bc2f865f82" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/19ca6cddcf7bf55d708db65e059089e2c2673e91", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m8AAoJENi59a6uhOTPLg4QALc8kFA2osIpJswqaq3z+Et3\nWZ4iNaXegU6NGLdariJm2LOKIVNAoJyKH15UZ58bCObsXRjXaagLy675L55bjdvt\ndi8zSbfBsUwY/pWL7sGa6I0DaMOZqWpzbqThwQQYsXhe+l2V5aCCeIn9IYKt2kF0\n22Gxp+AghZvRi2nn6KSrgH9sy9M0YwncEHIXb+oidBCoWAXn0YoWFCIXpOSvIOYG\npRnFud9kr+ZKafL1Nz9sabvDHt+KpAGjwJiWA+3ZvaGuZrEwEfIl33Q4hNJftrj3\nEZqP9VlfnQm6Xx2l0ZIy1cC1I6HPZlrvAEjBtKbRZurM2RS2agvz4dtjZ36c3eNP\nLQlBaJQTx/qjZTzZF1oh6Chn9mD0wU9yP7sBPinhZBb3P29kSEIgCEQmCp4qWfK7\n5c0eemLfTKHNF3XQ/Q8IPXWcAPGra0ZRLyccGl4u+zIu5/tUvJocN3AqL8CPVm9L\n1l4QrxmnohmfjsGZlzeSmmUkJj1+zWVWxUYZW898YDZk9jN88DA9jcSG3ys0gfL2\nNSygbvNjWOds/aJPknWmpNRFtV+gLK9VCmBDWiCJ3jJXuBsF7YDCkGP6KQaYxhhK\ndXo8+IewxAtEVKlfI8VAhjqzkO8/p6Z6U5GbOwEnGsp0c20+QU5kThO1O+Q2wwFz\nyZu1rYwh5ET+DtxN/V7i\n=mP4Z\n-----END PGP SIGNATURE-----", + "payload": "tree 1dcf1e0863d357228a9bdfebf3d0d4bc2f865f82\nparent 7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22\nauthor Sam Roberts 1479490845 -0800\ncommitter Anna Henningsen 1479793084 +0100\n\ntools: disallow trailing whitespace for markdown\n\nmarkdown had a dispensation because 2 or more trailing spaces triggers a\nnew paragraph. There are no examples of that usage in Node, all trailing\nwhitespace found were mistakes, and the dispensation is now removed.\n\nSee: https://github.com/nodejs/node/pull/9620\nPR-URL: https://github.com/nodejs/node/pull/9676\nReviewed-By: Luigi Pinca \nReviewed-By: Roman Reiss \nReviewed-By: Michaël Zasso \nReviewed-By: Gibson Fahnestock \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/19ca6cddcf7bf55d708db65e059089e2c2673e91", + "html_url": "https://github.com/nodejs/node/commit/19ca6cddcf7bf55d708db65e059089e2c2673e91", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/19ca6cddcf7bf55d708db65e059089e2c2673e91/comments", + "author": { + "login": "sam-github", + "id": 17607, + "node_id": "MDQ6VXNlcjE3NjA3", + "avatar_url": "https://avatars.githubusercontent.com/u/17607?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sam-github", + "html_url": "https://github.com/sam-github", + "followers_url": "https://api.github.com/users/sam-github/followers", + "following_url": "https://api.github.com/users/sam-github/following{/other_user}", + "gists_url": "https://api.github.com/users/sam-github/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sam-github/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sam-github/subscriptions", + "organizations_url": "https://api.github.com/users/sam-github/orgs", + "repos_url": "https://api.github.com/users/sam-github/repos", + "events_url": "https://api.github.com/users/sam-github/events{/privacy}", + "received_events_url": "https://api.github.com/users/sam-github/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "url": "https://api.github.com/repos/nodejs/node/commits/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22", + "html_url": "https://github.com/nodejs/node/commit/7c1a2f56fccdf2df2aefbf72533e9e6a307dcf22" + } + ] + }, + { + "sha": "1520afd33619eed24e8a5df92128f58efa41e584", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTUyMGFmZDMzNjE5ZWVkMjRlOGE1ZGY5MjEyOGY1OGVmYTQxZTU4NA==", + "commit": { + "author": { + "name": "Michaël Zasso", + "email": "targos@protonmail.com", + "date": "2016-11-19T13:35:49Z" + }, + "committer": { + "name": "Anna Henningsen", + "email": "anna@addaleax.net", + "date": "2016-11-22T05:38:05Z" + }, + "message": "deps: update V8 to 5.4.500.43\n\nPR-URL: https://github.com/nodejs/node/pull/9697\nReviewed-By: Ben Noordhuis \nReviewed-By: Colin Ihrig \nReviewed-By: Matteo Collina \nReviewed-By: Anna Henningsen ", + "tree": { + "sha": "68402a1e168450c940bd92327be2abcd468a8e6d", + "url": "https://api.github.com/repos/nodejs/node/git/trees/68402a1e168450c940bd92327be2abcd468a8e6d" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/1520afd33619eed24e8a5df92128f58efa41e584", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABAgAGBQJYM9m9AAoJENi59a6uhOTPgEkP/2Snh0mY4k+Qny3ux2b2N0rG\nDJihjXZY0JDuxbIvBYvVEdLek3EPqhyfpxw5O9iywZOs0ZLiVZ82L9//1KxLF6Fk\niuP5v54ls1p7D/QocXh98X1pcecVdyk0y83ch8J0FSax+h7Dn8Oo0ZQzJyDH+7dZ\nvL1UOMnGE8olyPgk7BPm/Q3AHNHrK0r40vgTN9gXVTzfIw6lKOGPaKSla4Ll1pY4\nhgt5ZBkBpze9XMPGbxwbUmPQPI4ePf2vBFkQw9DaiDTpovQ+sPiYxKsC4trfaP9g\n5WXPmKQLrFdycIu7FMsrCpmMU2LIOX5Ti3id422sVGa/q4cDprMQZeTombigYLfY\nrEbJY93WdJGfnQWDmkzbGHMQ5Grpq3pOOTmai/fTCQl2EGQrfqABVyZB4xuftPiY\nYG5AKvZCCLVJVVT+LiCVo97GjFCcFg2e+D6bLuNaCxFdjXEiJ2fiFF3i8xj1uF7k\nQDwgUd2txnaN4iIxg5lKeX7DNQHCN8sRUf7DILmyqtc9j+wtM8F1lU9Bhxik0k3u\njL+3PxliVEfEH1gTJit6PQy6ybCVEzKFQQ6zy2Ox6h+dUBH8AemeOe30d5teJWaI\nyrfeI4mElPJkNy/tSLsH0bMUOdoQvQGYUJDa2J2cqrTZZNQpMm/ahEub1ZBwSl39\nwdNzHhROkC3WDV9caICB\n=vHRK\n-----END PGP SIGNATURE-----", + "payload": "tree 68402a1e168450c940bd92327be2abcd468a8e6d\nparent 19ca6cddcf7bf55d708db65e059089e2c2673e91\nauthor Michaël Zasso 1479562549 +0100\ncommitter Anna Henningsen 1479793085 +0100\n\ndeps: update V8 to 5.4.500.43\n\nPR-URL: https://github.com/nodejs/node/pull/9697\nReviewed-By: Ben Noordhuis \nReviewed-By: Colin Ihrig \nReviewed-By: Matteo Collina \nReviewed-By: Anna Henningsen \n" + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/1520afd33619eed24e8a5df92128f58efa41e584", + "html_url": "https://github.com/nodejs/node/commit/1520afd33619eed24e8a5df92128f58efa41e584", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/1520afd33619eed24e8a5df92128f58efa41e584/comments", + "author": { + "login": "targos", + "id": 2352663, + "node_id": "MDQ6VXNlcjIzNTI2NjM=", + "avatar_url": "https://avatars.githubusercontent.com/u/2352663?v=4", + "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 + }, + "committer": { + "login": "addaleax", + "id": 899444, + "node_id": "MDQ6VXNlcjg5OTQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/899444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/addaleax", + "html_url": "https://github.com/addaleax", + "followers_url": "https://api.github.com/users/addaleax/followers", + "following_url": "https://api.github.com/users/addaleax/following{/other_user}", + "gists_url": "https://api.github.com/users/addaleax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addaleax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addaleax/subscriptions", + "organizations_url": "https://api.github.com/users/addaleax/orgs", + "repos_url": "https://api.github.com/users/addaleax/repos", + "events_url": "https://api.github.com/users/addaleax/events{/privacy}", + "received_events_url": "https://api.github.com/users/addaleax/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "19ca6cddcf7bf55d708db65e059089e2c2673e91", + "url": "https://api.github.com/repos/nodejs/node/commits/19ca6cddcf7bf55d708db65e059089e2c2673e91", + "html_url": "https://github.com/nodejs/node/commit/19ca6cddcf7bf55d708db65e059089e2c2673e91" + } + ] + }, + { + "sha": "8030994554ce40bc54848180061f9499c4c1f775", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ODAzMDk5NDU1NGNlNDBiYzU0ODQ4MTgwMDYxZjk0OTljNGMxZjc3NQ==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-10-19T11:29:35Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:12:50Z" + }, + "message": "doc: fix some table problems in changelog.md\n\nPR-URL: https://github.com/nodejs/node/pull/9183\nReviewed-By: Claudio Rodriguez \nReviewed-By: Michaël Zasso \nReviewed-By: Myles Borins \nReviewed-By: Gibson Fahnestock \nReviewed-By: James M Snell \nReviewed-By: Michael Dawson \n\n Conflicts:\n\tCHANGELOG.md", + "tree": { + "sha": "cfb56164b872a28c21feb425182ccc7382a2a5c4", + "url": "https://api.github.com/repos/nodejs/node/git/trees/cfb56164b872a28c21feb425182ccc7382a2a5c4" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/8030994554ce40bc54848180061f9499c4c1f775", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/8030994554ce40bc54848180061f9499c4c1f775", + "html_url": "https://github.com/nodejs/node/commit/8030994554ce40bc54848180061f9499c4c1f775", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/8030994554ce40bc54848180061f9499c4c1f775/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1520afd33619eed24e8a5df92128f58efa41e584", + "url": "https://api.github.com/repos/nodejs/node/commits/1520afd33619eed24e8a5df92128f58efa41e584", + "html_url": "https://github.com/nodejs/node/commit/1520afd33619eed24e8a5df92128f58efa41e584" + } + ] + }, + { + "sha": "bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YmJkNTg1MzIzNjg1MmI2N2U1YmJiNTBmZDNiZmZhN2E5NmIyYmRhNw==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-10-19T11:27:28Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:13:40Z" + }, + "message": "doc: v6 is now LTS rather than Current\n\nPR-URL: https://github.com/nodejs/node/pull/9182\nReviewed-By: Claudio Rodriguez \nReviewed-By: Gibson Fahnestock \nReviewed-By: James M Snell \nReviewed-By: Myles Borins \n\n Conflicts:\n\tCHANGELOG.md", + "tree": { + "sha": "2d2087549e9afa134b869ee9f8d73e07e1d0bb6f", + "url": "https://api.github.com/repos/nodejs/node/git/trees/2d2087549e9afa134b869ee9f8d73e07e1d0bb6f" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "html_url": "https://github.com/nodejs/node/commit/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "8030994554ce40bc54848180061f9499c4c1f775", + "url": "https://api.github.com/repos/nodejs/node/commits/8030994554ce40bc54848180061f9499c4c1f775", + "html_url": "https://github.com/nodejs/node/commit/8030994554ce40bc54848180061f9499c4c1f775" + } + ] + }, + { + "sha": "8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6OGE5YzQ1YTRhOTc0YmMzOTIyM2M0NDFjMzFlNTM2OTEzNGY4ZTZjMg==", + "commit": { + "author": { + "name": "Andreas Lind", + "email": "andreas@one.com", + "date": "2016-07-23T20:43:41Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:13:45Z" + }, + "message": "fs: Fix default params for fs.write(Sync)\n\nAdd support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb)\nas documented at\nhttps://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback\nand equivalently for fs.writeSync\n\nUpdate docs and code comments to reflect the implementation.\n\nPR-URL: https://github.com/nodejs/node/pull/7856\nReviewed-By: Sam Roberts \nReviewed-By: James M Snell \nReviewed-By: Brian White \nReviewed-By: Yorkie Liu \nReviewed-By: Gibson Fahnestock ", + "tree": { + "sha": "e38a829390ea96413dc212d3f53f078f2c3fc676", + "url": "https://api.github.com/repos/nodejs/node/git/trees/e38a829390ea96413dc212d3f53f078f2c3fc676" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "html_url": "https://github.com/nodejs/node/commit/8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/8a9c45a4a974bc39223c441c31e5369134f8e6c2/comments", + "author": { + "login": "papandreou", + "id": 373545, + "node_id": "MDQ6VXNlcjM3MzU0NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/373545?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/papandreou", + "html_url": "https://github.com/papandreou", + "followers_url": "https://api.github.com/users/papandreou/followers", + "following_url": "https://api.github.com/users/papandreou/following{/other_user}", + "gists_url": "https://api.github.com/users/papandreou/gists{/gist_id}", + "starred_url": "https://api.github.com/users/papandreou/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/papandreou/subscriptions", + "organizations_url": "https://api.github.com/users/papandreou/orgs", + "repos_url": "https://api.github.com/users/papandreou/repos", + "events_url": "https://api.github.com/users/papandreou/events{/privacy}", + "received_events_url": "https://api.github.com/users/papandreou/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "url": "https://api.github.com/repos/nodejs/node/commits/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7", + "html_url": "https://github.com/nodejs/node/commit/bbd5853236852b67e5bbb50fd3bffa7a96b2bda7" + } + ] + } + ] + \ No newline at end of file diff --git a/test/_fixtures/pull-request-commits-page-4.json b/test/_fixtures/pull-request-commits-page-4.json new file mode 100644 index 00000000..027c9041 --- /dev/null +++ b/test/_fixtures/pull-request-commits-page-4.json @@ -0,0 +1,1109 @@ +[ + { + "sha": "3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6M2Y0NWNjMTliMDg3OWQzZGE4YzcxMTY5YmZjZmFiODcyZGQyNzViOQ==", + "commit": { + "author": { + "name": "Adam Majer", + "email": "amajer@suse.de", + "date": "2016-08-30T11:16:27Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:02Z" + }, + "message": "crypto: Use reference count to manage cert_store\n\nSetting reference count at the time of setting cert_store instead of\ntrying to manage it by modifying internal states in destructor.\n\nPR-URL: https://github.com/nodejs/node/pull/9409\nReviewed-By: Fedor Indutny \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "b436da5ef2ef22825496279e3fabff9432089e91", + "url": "https://api.github.com/repos/nodejs/node/git/trees/b436da5ef2ef22825496279e3fabff9432089e91" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "html_url": "https://github.com/nodejs/node/commit/3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/3f45cc19b0879d3da8c71169bfcfab872dd275b9/comments", + "author": { + "login": "AdamMajer", + "id": 1211498, + "node_id": "MDQ6VXNlcjEyMTE0OTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1211498?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/AdamMajer", + "html_url": "https://github.com/AdamMajer", + "followers_url": "https://api.github.com/users/AdamMajer/followers", + "following_url": "https://api.github.com/users/AdamMajer/following{/other_user}", + "gists_url": "https://api.github.com/users/AdamMajer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AdamMajer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AdamMajer/subscriptions", + "organizations_url": "https://api.github.com/users/AdamMajer/orgs", + "repos_url": "https://api.github.com/users/AdamMajer/repos", + "events_url": "https://api.github.com/users/AdamMajer/events{/privacy}", + "received_events_url": "https://api.github.com/users/AdamMajer/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "url": "https://api.github.com/repos/nodejs/node/commits/8a9c45a4a974bc39223c441c31e5369134f8e6c2", + "html_url": "https://github.com/nodejs/node/commit/8a9c45a4a974bc39223c441c31e5369134f8e6c2" + } + ] + }, + { + "sha": "bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YmNkYmYyMmYwZGUwZTZhMDhiMTc0M2QyNzRjMjE1OTM0YmQ3ZDcxYQ==", + "commit": { + "author": { + "name": "Adam Langley", + "email": "agl@google.com", + "date": "2016-10-30T20:22:50Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:03Z" + }, + "message": "crypto: fix handling of root_cert_store.\n\nSecureContext::AddRootCerts only parses the root certificates once and\nkeeps the result in root_cert_store, a global X509_STORE. This change\naddresses the following issues:\n\n1. SecureContext::AddCACert would add certificates to whatever\nX509_STORE was being used, even if that happened to be root_cert_store.\nThus adding a CA certificate to a SecureContext would also cause it to\nbe included in unrelated SecureContexts.\n\n2. AddCRL would crash if neither AddRootCerts nor AddCACert had been\ncalled first.\n\n3. Calling AddCACert without calling AddRootCerts first, and with an\ninput that didn't contain any certificates, would leak an X509_STORE.\n\n4. AddCRL would add the CRL to whatever X509_STORE was being used. Thus,\nlike AddCACert, unrelated SecureContext objects could be affected.\n\nThe following, non-obvious behaviour remains: calling AddRootCerts\ndoesn't /add/ them, rather it sets the CA certs to be the root set and\noverrides any previous CA certificates.\n\nPoints 1–3 are probably unimportant because the SecureContext is\ntypically configured by `createSecureContext` in `lib/_tls_common.js`.\nThis function either calls AddCACert or AddRootCerts and only calls\nAddCRL after setting up CA certificates. Point four could still apply in\nthe unlikely case that someone configures a CRL without explicitly\nconfiguring the CAs.\n\nPR-URL: https://github.com/nodejs/node/pull/9409\nReviewed-By: Fedor Indutny \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "85fa57816738d23b6ddeeb75dc5e8f9bc5d422aa", + "url": "https://api.github.com/repos/nodejs/node/git/trees/85fa57816738d23b6ddeeb75dc5e8f9bc5d422aa" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "html_url": "https://github.com/nodejs/node/commit/bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/bcdbf22f0de0e6a08b1743d274c215934bd7d71a/comments", + "author": { + "login": "agl", + "id": 21203, + "node_id": "MDQ6VXNlcjIxMjAz", + "avatar_url": "https://avatars.githubusercontent.com/u/21203?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/agl", + "html_url": "https://github.com/agl", + "followers_url": "https://api.github.com/users/agl/followers", + "following_url": "https://api.github.com/users/agl/following{/other_user}", + "gists_url": "https://api.github.com/users/agl/gists{/gist_id}", + "starred_url": "https://api.github.com/users/agl/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/agl/subscriptions", + "organizations_url": "https://api.github.com/users/agl/orgs", + "repos_url": "https://api.github.com/users/agl/repos", + "events_url": "https://api.github.com/users/agl/events{/privacy}", + "received_events_url": "https://api.github.com/users/agl/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "url": "https://api.github.com/repos/nodejs/node/commits/3f45cc19b0879d3da8c71169bfcfab872dd275b9", + "html_url": "https://github.com/nodejs/node/commit/3f45cc19b0879d3da8c71169bfcfab872dd275b9" + } + ] + }, + { + "sha": "af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YWY3NGRiMzk2MTRjZTYyNWVjNmFmNGYwODlmN2Y5ZDIwYzhkNjdhMw==", + "commit": { + "author": { + "name": "Adam Langley", + "email": "agl@google.com", + "date": "2016-10-28T20:21:51Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:03Z" + }, + "message": "crypto: use SSL_get_servername.\n\n(Patch by David Benjamin.)\n\nRather than reach into the SSL_SESSION, use the intended API,\nSSL_get_servername. This will also help the transition to OpenSSL 1.1.0.\n\nAlso don't fill in the tlsTicket field here. This is never read by\noncertcb and was always false anyway; that field is maintained by\nclients and tracks whether the server issued a ticket or a session ID.\n\n(Note this is distinct from the copy passed to onclienthello which is\nused and is not a no-op.)\n\nPR-URL: https://github.com/nodejs/node/pull/9347\nReviewed-By: Fedor Indutny \nReviewed-By: Shigeki Ohtsu \nReviewed-By: Ben Noordhuis ", + "tree": { + "sha": "700541e78e1bd9b46199d07cd38c9544d54946f0", + "url": "https://api.github.com/repos/nodejs/node/git/trees/700541e78e1bd9b46199d07cd38c9544d54946f0" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "html_url": "https://github.com/nodejs/node/commit/af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/af74db39614ce625ec6af4f089f7f9d20c8d67a3/comments", + "author": { + "login": "agl", + "id": 21203, + "node_id": "MDQ6VXNlcjIxMjAz", + "avatar_url": "https://avatars.githubusercontent.com/u/21203?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/agl", + "html_url": "https://github.com/agl", + "followers_url": "https://api.github.com/users/agl/followers", + "following_url": "https://api.github.com/users/agl/following{/other_user}", + "gists_url": "https://api.github.com/users/agl/gists{/gist_id}", + "starred_url": "https://api.github.com/users/agl/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/agl/subscriptions", + "organizations_url": "https://api.github.com/users/agl/orgs", + "repos_url": "https://api.github.com/users/agl/repos", + "events_url": "https://api.github.com/users/agl/events{/privacy}", + "received_events_url": "https://api.github.com/users/agl/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "url": "https://api.github.com/repos/nodejs/node/commits/bcdbf22f0de0e6a08b1743d274c215934bd7d71a", + "html_url": "https://github.com/nodejs/node/commit/bcdbf22f0de0e6a08b1743d274c215934bd7d71a" + } + ] + }, + { + "sha": "ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZWJjOWM0YmE5NzQ3NjViMzIxZmRmZTExM2NkOWFlY2NiZDAyMTdmYw==", + "commit": { + "author": { + "name": "Evan Lucas", + "email": "evanlucas@me.com", + "date": "2016-11-10T11:13:14Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:03Z" + }, + "message": "doc: add missing link in changelog\n\nThe link to v7.1.0 was missing.\n\nPR-URL: https://github.com/nodejs/node/pull/9540\nReviewed-By: Roman Reiss ", + "tree": { + "sha": "bcf10fa83cb1eb6821e81f847f010e2effc79dbb", + "url": "https://api.github.com/repos/nodejs/node/git/trees/bcf10fa83cb1eb6821e81f847f010e2effc79dbb" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "html_url": "https://github.com/nodejs/node/commit/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc/comments", + "author": { + "login": "evanlucas", + "id": 677994, + "node_id": "MDQ6VXNlcjY3Nzk5NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/677994?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/evanlucas", + "html_url": "https://github.com/evanlucas", + "followers_url": "https://api.github.com/users/evanlucas/followers", + "following_url": "https://api.github.com/users/evanlucas/following{/other_user}", + "gists_url": "https://api.github.com/users/evanlucas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/evanlucas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/evanlucas/subscriptions", + "organizations_url": "https://api.github.com/users/evanlucas/orgs", + "repos_url": "https://api.github.com/users/evanlucas/repos", + "events_url": "https://api.github.com/users/evanlucas/events{/privacy}", + "received_events_url": "https://api.github.com/users/evanlucas/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "url": "https://api.github.com/repos/nodejs/node/commits/af74db39614ce625ec6af4f089f7f9d20c8d67a3", + "html_url": "https://github.com/nodejs/node/commit/af74db39614ce625ec6af4f089f7f9d20c8d67a3" + } + ] + }, + { + "sha": "409851427a1b49c2a2cd46e47861420ecb2d83b1", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6NDA5ODUxNDI3YTFiNDljMmEyY2Q0NmU0Nzg2MTQyMGVjYjJkODNiMQ==", + "commit": { + "author": { + "name": "Syuhei Kobayashi", + "email": "nanocloudx@gmail.com", + "date": "2016-11-12T07:36:09Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:03Z" + }, + "message": "doc: fix typo in doc/tls.md\n\nfix doc/tls.md: line 762 836 1026 e.g., => e.g.\n\nFixes: https://github.com/nodejs/code-and-learn/issues/58\nPR-URL: https://github.com/nodejs/node/pull/9566\nReviewed-By: Roman Reiss \nReviewed-By: Anna Henningsen \nReviewed-By: Luigi Pinca \nReviewed-By: Shigeki Ohtsu ", + "tree": { + "sha": "e9f36f824d10da1fe4d097cd5b3eb9566b8c6ee3", + "url": "https://api.github.com/repos/nodejs/node/git/trees/e9f36f824d10da1fe4d097cd5b3eb9566b8c6ee3" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/409851427a1b49c2a2cd46e47861420ecb2d83b1", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/409851427a1b49c2a2cd46e47861420ecb2d83b1", + "html_url": "https://github.com/nodejs/node/commit/409851427a1b49c2a2cd46e47861420ecb2d83b1", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/409851427a1b49c2a2cd46e47861420ecb2d83b1/comments", + "author": { + "login": "nanocloudx", + "id": 6778507, + "node_id": "MDQ6VXNlcjY3Nzg1MDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/6778507?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nanocloudx", + "html_url": "https://github.com/nanocloudx", + "followers_url": "https://api.github.com/users/nanocloudx/followers", + "following_url": "https://api.github.com/users/nanocloudx/following{/other_user}", + "gists_url": "https://api.github.com/users/nanocloudx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nanocloudx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nanocloudx/subscriptions", + "organizations_url": "https://api.github.com/users/nanocloudx/orgs", + "repos_url": "https://api.github.com/users/nanocloudx/repos", + "events_url": "https://api.github.com/users/nanocloudx/events{/privacy}", + "received_events_url": "https://api.github.com/users/nanocloudx/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "url": "https://api.github.com/repos/nodejs/node/commits/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc", + "html_url": "https://github.com/nodejs/node/commit/ebc9c4ba974765b321fdfe113cd9aeccbd0217fc" + } + ] + }, + { + "sha": "a83a28663172d140d4163fe880fadfc298dde1de", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YTgzYTI4NjYzMTcyZDE0MGQ0MTYzZmU4ODBmYWRmYzI5OGRkZTFkZQ==", + "commit": { + "author": { + "name": "cjihrig", + "email": "cjihrig@gmail.com", + "date": "2016-11-09T15:08:23Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:04Z" + }, + "message": "test: add test for broken child process stdio\n\nThis commit adds a test for the scenario where a child process is\nspawned, but the stdio streams could not be created.\n\nPR-URL: https://github.com/nodejs/node/pull/9528\nReviewed-By: Daniel Bevenius \nReviewed-By: Rich Trott \nReviewed-By: Santiago Gimeno \nReviewed-By: Michael Dawson ", + "tree": { + "sha": "290c8a43ff7c5d85b5245df617f82f99a30124dd", + "url": "https://api.github.com/repos/nodejs/node/git/trees/290c8a43ff7c5d85b5245df617f82f99a30124dd" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/a83a28663172d140d4163fe880fadfc298dde1de", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/a83a28663172d140d4163fe880fadfc298dde1de", + "html_url": "https://github.com/nodejs/node/commit/a83a28663172d140d4163fe880fadfc298dde1de", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/a83a28663172d140d4163fe880fadfc298dde1de/comments", + "author": { + "login": "cjihrig", + "id": 2512748, + "node_id": "MDQ6VXNlcjI1MTI3NDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/2512748?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjihrig", + "html_url": "https://github.com/cjihrig", + "followers_url": "https://api.github.com/users/cjihrig/followers", + "following_url": "https://api.github.com/users/cjihrig/following{/other_user}", + "gists_url": "https://api.github.com/users/cjihrig/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjihrig/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjihrig/subscriptions", + "organizations_url": "https://api.github.com/users/cjihrig/orgs", + "repos_url": "https://api.github.com/users/cjihrig/repos", + "events_url": "https://api.github.com/users/cjihrig/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjihrig/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "409851427a1b49c2a2cd46e47861420ecb2d83b1", + "url": "https://api.github.com/repos/nodejs/node/commits/409851427a1b49c2a2cd46e47861420ecb2d83b1", + "html_url": "https://github.com/nodejs/node/commit/409851427a1b49c2a2cd46e47861420ecb2d83b1" + } + ] + }, + { + "sha": "30475beef69e6e5e4de428de531a0d71546964de", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MzA0NzViZWVmNjllNmU1ZTRkZTQyOGRlNTMxYTBkNzE1NDY5NjRkZQ==", + "commit": { + "author": { + "name": "Evan Lucas", + "email": "evanlucas@me.com", + "date": "2016-11-15T11:29:38Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:04Z" + }, + "message": "src: use ABORT() macro instead of abort()\n\nThis makes sure that we dump a backtrace and use raise(SIGABRT) on\nWindows.\n\nPR-URL: https://github.com/nodejs/node/pull/9613\nReviewed-By: Ben Noordhuis \nReviewed-By: Colin Ihrig ", + "tree": { + "sha": "144602047b4e17acb8347d30c30347535afcbd29", + "url": "https://api.github.com/repos/nodejs/node/git/trees/144602047b4e17acb8347d30c30347535afcbd29" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/30475beef69e6e5e4de428de531a0d71546964de", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/30475beef69e6e5e4de428de531a0d71546964de", + "html_url": "https://github.com/nodejs/node/commit/30475beef69e6e5e4de428de531a0d71546964de", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/30475beef69e6e5e4de428de531a0d71546964de/comments", + "author": { + "login": "evanlucas", + "id": 677994, + "node_id": "MDQ6VXNlcjY3Nzk5NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/677994?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/evanlucas", + "html_url": "https://github.com/evanlucas", + "followers_url": "https://api.github.com/users/evanlucas/followers", + "following_url": "https://api.github.com/users/evanlucas/following{/other_user}", + "gists_url": "https://api.github.com/users/evanlucas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/evanlucas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/evanlucas/subscriptions", + "organizations_url": "https://api.github.com/users/evanlucas/orgs", + "repos_url": "https://api.github.com/users/evanlucas/repos", + "events_url": "https://api.github.com/users/evanlucas/events{/privacy}", + "received_events_url": "https://api.github.com/users/evanlucas/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a83a28663172d140d4163fe880fadfc298dde1de", + "url": "https://api.github.com/repos/nodejs/node/commits/a83a28663172d140d4163fe880fadfc298dde1de", + "html_url": "https://github.com/nodejs/node/commit/a83a28663172d140d4163fe880fadfc298dde1de" + } + ] + }, + { + "sha": "786631c7b478a489cb9f99bef8e28662c930f86d", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6Nzg2NjMxYzdiNDc4YTQ4OWNiOWY5OWJlZjhlMjg2NjJjOTMwZjg2ZA==", + "commit": { + "author": { + "name": "cjihrig", + "email": "cjihrig@gmail.com", + "date": "2016-11-16T18:49:21Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:04Z" + }, + "message": "deps: upgrade libuv to 1.10.1\n\nFixes: https://github.com/nodejs/node/issues/9542\nFixes: https://github.com/nodejs/node/issues/9546\nPR-URL: https://github.com/nodejs/node/pull/9647\nReviewed-By: Imran Iqbal \nReviewed-By: Santiago Gimeno \nReviewed-By: Ben Noordhuis \nReviewed-By: Myles Borins \nReviewed-By: Johan Bergström ", + "tree": { + "sha": "bdbb080211422cca1b84b1ff17a3cc81b64f45e3", + "url": "https://api.github.com/repos/nodejs/node/git/trees/bdbb080211422cca1b84b1ff17a3cc81b64f45e3" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/786631c7b478a489cb9f99bef8e28662c930f86d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/786631c7b478a489cb9f99bef8e28662c930f86d", + "html_url": "https://github.com/nodejs/node/commit/786631c7b478a489cb9f99bef8e28662c930f86d", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/786631c7b478a489cb9f99bef8e28662c930f86d/comments", + "author": { + "login": "cjihrig", + "id": 2512748, + "node_id": "MDQ6VXNlcjI1MTI3NDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/2512748?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjihrig", + "html_url": "https://github.com/cjihrig", + "followers_url": "https://api.github.com/users/cjihrig/followers", + "following_url": "https://api.github.com/users/cjihrig/following{/other_user}", + "gists_url": "https://api.github.com/users/cjihrig/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjihrig/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjihrig/subscriptions", + "organizations_url": "https://api.github.com/users/cjihrig/orgs", + "repos_url": "https://api.github.com/users/cjihrig/repos", + "events_url": "https://api.github.com/users/cjihrig/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjihrig/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "30475beef69e6e5e4de428de531a0d71546964de", + "url": "https://api.github.com/repos/nodejs/node/commits/30475beef69e6e5e4de428de531a0d71546964de", + "html_url": "https://github.com/nodejs/node/commit/30475beef69e6e5e4de428de531a0d71546964de" + } + ] + }, + { + "sha": "15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MTVhZjkxMmFiNTgyZTkyYWI0ZTJmMGUzOGVjNmJiNmU5ODhmYzA5OQ==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-11-14T12:39:40Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:04Z" + }, + "message": "src: fix memory leak introduced in 34febfbf4\n\nFix leaking the BIO in the error path. Introduced in commit 34febfbf4\n(\"crypto: fix handling of root_cert_store\").\n\nPR-URL: https://github.com/nodejs/node/pull/9604\nRefs: https://github.com/nodejs/node/pull/9409\nReviewed-By: Anna Henningsen \nReviewed-By: Colin Ihrig \nReviewed-By: Fedor Indutny \nReviewed-By: James M Snell \nReviewed-By: Jeremiah Senkpiel \nReviewed-By: Michael Dawson \nReviewed-By: Rod Vagg ", + "tree": { + "sha": "1b9ff21f1820f0b6016fa31cd2b43e5f68b0b1f6", + "url": "https://api.github.com/repos/nodejs/node/git/trees/1b9ff21f1820f0b6016fa31cd2b43e5f68b0b1f6" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "html_url": "https://github.com/nodejs/node/commit/15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/15af912ab582e92ab4e2f0e38ec6bb6e988fc099/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "786631c7b478a489cb9f99bef8e28662c930f86d", + "url": "https://api.github.com/repos/nodejs/node/commits/786631c7b478a489cb9f99bef8e28662c930f86d", + "html_url": "https://github.com/nodejs/node/commit/786631c7b478a489cb9f99bef8e28662c930f86d" + } + ] + }, + { + "sha": "1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MWJkNzkzNjhjZGFiMTJlNTZiNjY3NWRmZThiZjBkOTQ5YTdkY2NmYg==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-10-26T05:51:34Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:05Z" + }, + "message": "dns: implement {ttl: true} for dns.resolve4()\n\nAdd an option to retrieve the Time-To-Live of the A record.\n\nPR-URL: https://github.com/nodejs/node/pull/9296\nRefs: https://github.com/nodejs/node/issues/5893\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "6186b486ce217a6cd85bc0823635eb189e99fadf", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6186b486ce217a6cd85bc0823635eb189e99fadf" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "html_url": "https://github.com/nodejs/node/commit/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "url": "https://api.github.com/repos/nodejs/node/commits/15af912ab582e92ab4e2f0e38ec6bb6e988fc099", + "html_url": "https://github.com/nodejs/node/commit/15af912ab582e92ab4e2f0e38ec6bb6e988fc099" + } + ] + }, + { + "sha": "0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MGEzZTVjYzU3YWM5MTM2ZDU3NmFiNmUzNzgyNWVjMDRmYTViYWM3ZQ==", + "commit": { + "author": { + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "date": "2016-10-26T05:54:20Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T16:15:05Z" + }, + "message": "dns: implement {ttl: true} for dns.resolve6()\n\nAdd an option to retrieve the Time-To-Live of the AAAA record.\n\nPR-URL: https://github.com/nodejs/node/pull/9296\nRefs: https://github.com/nodejs/node/issues/5893\nReviewed-By: James M Snell \nReviewed-By: Roman Reiss ", + "tree": { + "sha": "a07257932b461a9643941c522ade943bacce13de", + "url": "https://api.github.com/repos/nodejs/node/git/trees/a07257932b461a9643941c522ade943bacce13de" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "html_url": "https://github.com/nodejs/node/commit/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e/comments", + "author": { + "login": "bnoordhuis", + "id": 275871, + "node_id": "MDQ6VXNlcjI3NTg3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275871?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bnoordhuis", + "html_url": "https://github.com/bnoordhuis", + "followers_url": "https://api.github.com/users/bnoordhuis/followers", + "following_url": "https://api.github.com/users/bnoordhuis/following{/other_user}", + "gists_url": "https://api.github.com/users/bnoordhuis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bnoordhuis/subscriptions", + "organizations_url": "https://api.github.com/users/bnoordhuis/orgs", + "repos_url": "https://api.github.com/users/bnoordhuis/repos", + "events_url": "https://api.github.com/users/bnoordhuis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bnoordhuis/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "url": "https://api.github.com/repos/nodejs/node/commits/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb", + "html_url": "https://github.com/nodejs/node/commit/1bd79368cdab12e56b6675dfe8bf0d949a7dccfb" + } + ] + }, + { + "sha": "fa98eec410e1e4269cf9bf67fe1569503562159a", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6ZmE5OGVlYzQxMGUxZTQyNjljZjliZjY3ZmUxNTY5NTAzNTYyMTU5YQ==", + "commit": { + "author": { + "name": "Vse Mozhet Byt", + "email": "vsemozhetbyt@gmail.com", + "date": "2016-11-20T02:20:35Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T17:29:41Z" + }, + "message": "doc: fix typo in assert code example\n\nPR-URL: https://github.com/nodejs/node/pull/9704\nReviewed-By: Colin Ihrig \nReviewed-By: Anna Henningsen \nReviewed-By: Sakthipriyan Vairamani \nReviewed-By: Luigi Pinca ", + "tree": { + "sha": "6b5ecdd5bd5df64e455c7b1426df3c7484df91c2", + "url": "https://api.github.com/repos/nodejs/node/git/trees/6b5ecdd5bd5df64e455c7b1426df3c7484df91c2" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/fa98eec410e1e4269cf9bf67fe1569503562159a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/fa98eec410e1e4269cf9bf67fe1569503562159a", + "html_url": "https://github.com/nodejs/node/commit/fa98eec410e1e4269cf9bf67fe1569503562159a", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/fa98eec410e1e4269cf9bf67fe1569503562159a/comments", + "author": { + "login": "vsemozhetbyt", + "id": 10393198, + "node_id": "MDQ6VXNlcjEwMzkzMTk4", + "avatar_url": "https://avatars.githubusercontent.com/u/10393198?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vsemozhetbyt", + "html_url": "https://github.com/vsemozhetbyt", + "followers_url": "https://api.github.com/users/vsemozhetbyt/followers", + "following_url": "https://api.github.com/users/vsemozhetbyt/following{/other_user}", + "gists_url": "https://api.github.com/users/vsemozhetbyt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vsemozhetbyt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vsemozhetbyt/subscriptions", + "organizations_url": "https://api.github.com/users/vsemozhetbyt/orgs", + "repos_url": "https://api.github.com/users/vsemozhetbyt/repos", + "events_url": "https://api.github.com/users/vsemozhetbyt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vsemozhetbyt/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "url": "https://api.github.com/repos/nodejs/node/commits/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e", + "html_url": "https://github.com/nodejs/node/commit/0a3e5cc57ac9136d576ab6e37825ec04fa5bac7e" + } + ] + }, + { + "sha": "02c2bf7d34141ddb903e215580ee79551790ac48", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6MDJjMmJmN2QzNDE0MWRkYjkwM2UyMTU1ODBlZTc5NTUxNzkwYWM0OA==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-18T20:47:15Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T17:29:41Z" + }, + "message": "timers: use consistent checks for canceled timers\n\nPreviously not all codepaths set `timer._idleTimeout = -1` for canceled\nor closed timers, and not all codepaths checked it either.\n\nUnenroll uses this to say that a timer is indeed closed and it is the\nclosest thing there is to an authoritative source for this.\n\nRefs: https://github.com/nodejs/node/pull/9606\nFixes: https://github.com/nodejs/node/issues/9561\nPR-URL: https://github.com/nodejs/node/pull/9685\nReviewed-By: Rich Trott ", + "tree": { + "sha": "41c49c72effaf229888f8fb75e0f3918f1804cce", + "url": "https://api.github.com/repos/nodejs/node/git/trees/41c49c72effaf229888f8fb75e0f3918f1804cce" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/02c2bf7d34141ddb903e215580ee79551790ac48", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/02c2bf7d34141ddb903e215580ee79551790ac48", + "html_url": "https://github.com/nodejs/node/commit/02c2bf7d34141ddb903e215580ee79551790ac48", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/02c2bf7d34141ddb903e215580ee79551790ac48/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "fa98eec410e1e4269cf9bf67fe1569503562159a", + "url": "https://api.github.com/repos/nodejs/node/commits/fa98eec410e1e4269cf9bf67fe1569503562159a", + "html_url": "https://github.com/nodejs/node/commit/fa98eec410e1e4269cf9bf67fe1569503562159a" + } + ] + }, + { + "sha": "c1aa949064892dbe693750686c06f4ad5673e577", + "node_id": "MDY6Q29tbWl0MjcxOTM3Nzk6YzFhYTk0OTA2NDg5MmRiZTY5Mzc1MDY4NmMwNmY0YWQ1NjczZTU3Nw==", + "commit": { + "author": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T22:13:11Z" + }, + "committer": { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "date": "2016-11-22T22:13:11Z" + }, + "message": "2016-11-22, Version 7.2.0 (Current)\n\nThis is a security release impacting Windows 10 users.\n\nNotable changes:\n\n* crypto: The `Decipher` methods `setAuthTag()` and `setAAD` now return\n`this`. (Kirill Fomichev) https://github.com/nodejs/node/pull/9398\n* dns: Implemented `{ttl: true}` for `resolve4()` and `resolve6()`.\n(Ben Noordhuis) https://github.com/nodejs/node/pull/9296 &\nhttps://github.com/nodejs/node/pull/9296\n* libuv: Upgrade to v1.10.1 (cjihrig)\nhttps://github.com/nodejs/node/pull/9647\n - Fixed a potential buffer overflow when writing data to console on\nWindows 10. (CVE-2016-9551)\n* process: Added a new `external` property to the data returned by\n`memoryUsage()`. (Fedor Indutny)\nhttps://github.com/nodejs/node/pull/9587\n* tls: Fixed a memory leak when writes were queued on TLS connection\nthat was destroyed during handshake. (Fedor Indutny)\nhttps://github.com/nodejs/node/pull/9626\n* V8 (dep): Upgrade to v5.4.500.43 (Michaël Zasso)\nhttps://github.com/nodejs/node/pull/9697\n* v8: The data returned by `getHeapStatistics()` now includes three new\nfields: `malloced_memory`, `peak_malloced_memory`, and\n`does_zap_garbage`. (Gareth Ellis)\nhttps://github.com/nodejs/node/pull/8610\n\nPR-URL: https://github.com/nodejs/node/pull/9745", + "tree": { + "sha": "f87da6adf9e7e876103744caf4530793c3650129", + "url": "https://api.github.com/repos/nodejs/node/git/trees/f87da6adf9e7e876103744caf4530793c3650129" + }, + "url": "https://api.github.com/repos/nodejs/node/git/commits/c1aa949064892dbe693750686c06f4ad5673e577", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/nodejs/node/commits/c1aa949064892dbe693750686c06f4ad5673e577", + "html_url": "https://github.com/nodejs/node/commit/c1aa949064892dbe693750686c06f4ad5673e577", + "comments_url": "https://api.github.com/repos/nodejs/node/commits/c1aa949064892dbe693750686c06f4ad5673e577/comments", + "author": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Fishrock123", + "id": 1093990, + "node_id": "MDQ6VXNlcjEwOTM5OTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1093990?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fishrock123", + "html_url": "https://github.com/Fishrock123", + "followers_url": "https://api.github.com/users/Fishrock123/followers", + "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", + "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", + "organizations_url": "https://api.github.com/users/Fishrock123/orgs", + "repos_url": "https://api.github.com/users/Fishrock123/repos", + "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fishrock123/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "02c2bf7d34141ddb903e215580ee79551790ac48", + "url": "https://api.github.com/repos/nodejs/node/commits/02c2bf7d34141ddb903e215580ee79551790ac48", + "html_url": "https://github.com/nodejs/node/commit/02c2bf7d34141ddb903e215580ee79551790ac48" + } + ] + } + ] + \ No newline at end of file diff --git a/test/_fixtures/pull-request-create-comment.json b/test/_fixtures/pull-request-create-comment.json new file mode 100644 index 00000000..1963ad00 --- /dev/null +++ b/test/_fixtures/pull-request-create-comment.json @@ -0,0 +1,32 @@ +{ + "url": "https://api.github.com/repos/nodejs/node-auto-test/issues/comments/667621459", + "html_url": "https://github.com/nodejs/node-auto-test/pull/19#issuecomment-667621459", + "issue_url": "https://api.github.com/repos/nodejs/node-auto-test/issues/19", + "id": 667621459, + "node_id": "MDEyOklzc3VlQ29tbWVudDY2NzYyMTQ1OQ==", + "user": { + "login": "mmarchini", + "id": 4048656, + "node_id": "MDQ6VXNlcjQwNDg2NTY=", + "avatar_url": "https://avatars1.githubusercontent.com/u/4048656?u=bf848ffe5efedded28239e602bfa3cd07b8e3e05&v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mmarchini", + "html_url": "https://github.com/mmarchini", + "followers_url": "https://api.github.com/users/mmarchini/followers", + "following_url": "https://api.github.com/users/mmarchini/following{/other_user}", + "gists_url": "https://api.github.com/users/mmarchini/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mmarchini/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mmarchini/subscriptions", + "organizations_url": "https://api.github.com/users/mmarchini/orgs", + "repos_url": "https://api.github.com/users/mmarchini/repos", + "events_url": "https://api.github.com/users/mmarchini/events{/privacy}", + "received_events_url": "https://api.github.com/users/mmarchini/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2020-08-02T03:37:18Z", + "updated_at": "2020-08-02T03:37:18Z", + "author_association": "MEMBER", + "body": "test comment", + "performed_via_github_app": null +} diff --git a/test/_fixtures/pull-requests-commits-page-1.json b/test/_fixtures/pull-requests-commits-page-1.json deleted file mode 100644 index 58e438e9..00000000 --- a/test/_fixtures/pull-requests-commits-page-1.json +++ /dev/null @@ -1,78 +0,0 @@ -{"data": [ - { - "sha": "45df0ee7171cf5f9642fb755be1b24075192347c", - "commit": { - "author": { - "name": "Jaideep Bajwa", - "email": "bjaideep@ca.ibm.com", - "date": "2016-11-01T06:53:37Z" - }, - "committer": { - "name": "Myles Borins", - "email": "myles.borins@gmail.com", - "date": "2016-11-11T15:48:36Z" - }, - "message": "v8: update make-v8.sh to use git\n\ngoogle build tool gclient doesn't support\nsvn anymore. Updating v8 build script to use\ngit instead.\n\nPR-URL: https://github.com/nodejs/node/pull/9393\nReviewed By: Sakthipriyan Vairamani \nReviewed-By: Ben Noordhuis \nReviewed-By: Michael Dawson ", - "tree": { - "sha": "42de90a38ab9499bad7d34a472584b164cc4640c", - "url": "https://api.github.com/repos/nodejs/node/git/trees/42de90a38ab9499bad7d34a472584b164cc4640c" - }, - "url": "https://api.github.com/repos/nodejs/node/git/commits/45df0ee7171cf5f9642fb755be1b24075192347c", - "comment_count": 0, - "verification": { - "verified": false, - "reason": "unsigned", - "signature": null, - "payload": null - } - }, - "url": "https://api.github.com/repos/nodejs/node/commits/45df0ee7171cf5f9642fb755be1b24075192347c", - "html_url": "https://github.com/nodejs/node/commit/45df0ee7171cf5f9642fb755be1b24075192347c", - "comments_url": "https://api.github.com/repos/nodejs/node/commits/45df0ee7171cf5f9642fb755be1b24075192347c/comments", - "author": { - "login": "jbajwa", - "id": 577562, - "avatar_url": "https://avatars1.githubusercontent.com/u/577562?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jbajwa", - "html_url": "https://github.com/jbajwa", - "followers_url": "https://api.github.com/users/jbajwa/followers", - "following_url": "https://api.github.com/users/jbajwa/following{/other_user}", - "gists_url": "https://api.github.com/users/jbajwa/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jbajwa/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jbajwa/subscriptions", - "organizations_url": "https://api.github.com/users/jbajwa/orgs", - "repos_url": "https://api.github.com/users/jbajwa/repos", - "events_url": "https://api.github.com/users/jbajwa/events{/privacy}", - "received_events_url": "https://api.github.com/users/jbajwa/received_events", - "type": "User", - "site_admin": false - }, - "committer": { - "login": "MylesBorins", - "id": 498775, - "avatar_url": "https://avatars1.githubusercontent.com/u/498775?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/MylesBorins", - "html_url": "https://github.com/MylesBorins", - "followers_url": "https://api.github.com/users/MylesBorins/followers", - "following_url": "https://api.github.com/users/MylesBorins/following{/other_user}", - "gists_url": "https://api.github.com/users/MylesBorins/gists{/gist_id}", - "starred_url": "https://api.github.com/users/MylesBorins/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/MylesBorins/subscriptions", - "organizations_url": "https://api.github.com/users/MylesBorins/orgs", - "repos_url": "https://api.github.com/users/MylesBorins/repos", - "events_url": "https://api.github.com/users/MylesBorins/events{/privacy}", - "received_events_url": "https://api.github.com/users/MylesBorins/received_events", - "type": "User", - "site_admin": false - }, - "parents": [ - { - "sha": "3daf11635dc8e0cf48110514000fd550ed79a425", - "url": "https://api.github.com/repos/nodejs/node/commits/3daf11635dc8e0cf48110514000fd550ed79a425", - "html_url": "https://github.com/nodejs/node/commit/3daf11635dc8e0cf48110514000fd550ed79a425" - } - ] - } -]} diff --git a/test/_fixtures/pull-requests-commits-page-104.json b/test/_fixtures/pull-requests-commits-page-104.json deleted file mode 100644 index f7b3ccaf..00000000 --- a/test/_fixtures/pull-requests-commits-page-104.json +++ /dev/null @@ -1,78 +0,0 @@ -{"data": [ - { - "sha": "c1aa949064892dbe693750686c06f4ad5673e577", - "commit": { - "author": { - "name": "Jeremiah Senkpiel", - "email": "fishrock123@rocketmail.com", - "date": "2016-11-22T22:13:11Z" - }, - "committer": { - "name": "Jeremiah Senkpiel", - "email": "fishrock123@rocketmail.com", - "date": "2016-11-22T22:13:11Z" - }, - "message": "2016-11-22, Version 7.2.0 (Current)\n\nThis is a security release impacting Windows 10 users.\n\nNotable changes:\n\n* crypto: The `Decipher` methods `setAuthTag()` and `setAAD` now return\n`this`. (Kirill Fomichev) https://github.com/nodejs/node/pull/9398\n* dns: Implemented `{ttl: true}` for `resolve4()` and `resolve6()`.\n(Ben Noordhuis) https://github.com/nodejs/node/pull/9296 &\nhttps://github.com/nodejs/node/pull/9296\n* libuv: Upgrade to v1.10.1 (cjihrig)\nhttps://github.com/nodejs/node/pull/9647\n - Fixed a potential buffer overflow when writing data to console on\nWindows 10. (CVE-2016-9551)\n* process: Added a new `external` property to the data returned by\n`memoryUsage()`. (Fedor Indutny)\nhttps://github.com/nodejs/node/pull/9587\n* tls: Fixed a memory leak when writes were queued on TLS connection\nthat was destroyed during handshake. (Fedor Indutny)\nhttps://github.com/nodejs/node/pull/9626\n* V8 (dep): Upgrade to v5.4.500.43 (Michaël Zasso)\nhttps://github.com/nodejs/node/pull/9697\n* v8: The data returned by `getHeapStatistics()` now includes three new\nfields: `malloced_memory`, `peak_malloced_memory`, and\n`does_zap_garbage`. (Gareth Ellis)\nhttps://github.com/nodejs/node/pull/8610\n\nPR-URL: https://github.com/nodejs/node/pull/9745", - "tree": { - "sha": "f87da6adf9e7e876103744caf4530793c3650129", - "url": "https://api.github.com/repos/nodejs/node/git/trees/f87da6adf9e7e876103744caf4530793c3650129" - }, - "url": "https://api.github.com/repos/nodejs/node/git/commits/c1aa949064892dbe693750686c06f4ad5673e577", - "comment_count": 0, - "verification": { - "verified": false, - "reason": "unsigned", - "signature": null, - "payload": null - } - }, - "url": "https://api.github.com/repos/nodejs/node/commits/c1aa949064892dbe693750686c06f4ad5673e577", - "html_url": "https://github.com/nodejs/node/commit/c1aa949064892dbe693750686c06f4ad5673e577", - "comments_url": "https://api.github.com/repos/nodejs/node/commits/c1aa949064892dbe693750686c06f4ad5673e577/comments", - "author": { - "login": "Fishrock123", - "id": 1093990, - "avatar_url": "https://avatars0.githubusercontent.com/u/1093990?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/Fishrock123", - "html_url": "https://github.com/Fishrock123", - "followers_url": "https://api.github.com/users/Fishrock123/followers", - "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", - "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", - "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", - "organizations_url": "https://api.github.com/users/Fishrock123/orgs", - "repos_url": "https://api.github.com/users/Fishrock123/repos", - "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", - "received_events_url": "https://api.github.com/users/Fishrock123/received_events", - "type": "User", - "site_admin": false - }, - "committer": { - "login": "Fishrock123", - "id": 1093990, - "avatar_url": "https://avatars0.githubusercontent.com/u/1093990?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/Fishrock123", - "html_url": "https://github.com/Fishrock123", - "followers_url": "https://api.github.com/users/Fishrock123/followers", - "following_url": "https://api.github.com/users/Fishrock123/following{/other_user}", - "gists_url": "https://api.github.com/users/Fishrock123/gists{/gist_id}", - "starred_url": "https://api.github.com/users/Fishrock123/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/Fishrock123/subscriptions", - "organizations_url": "https://api.github.com/users/Fishrock123/orgs", - "repos_url": "https://api.github.com/users/Fishrock123/repos", - "events_url": "https://api.github.com/users/Fishrock123/events{/privacy}", - "received_events_url": "https://api.github.com/users/Fishrock123/received_events", - "type": "User", - "site_admin": false - }, - "parents": [ - { - "sha": "02c2bf7d34141ddb903e215580ee79551790ac48", - "url": "https://api.github.com/repos/nodejs/node/commits/02c2bf7d34141ddb903e215580ee79551790ac48", - "html_url": "https://github.com/nodejs/node/commit/02c2bf7d34141ddb903e215580ee79551790ac48" - } - ] - } -]} diff --git a/test/_fixtures/repo-labels-page-2.json b/test/_fixtures/repo-labels-page-2.json deleted file mode 100644 index db72898d..00000000 --- a/test/_fixtures/repo-labels-page-2.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "data": [ - { - "id": 280213872, - "url": "https://api.github.com/repos/nodejs/node/labels/v0.12", - "name": "v0.12", - "color": "c7def8", - "default": false - }, - { - "id": 280213880, - "url": "https://api.github.com/repos/nodejs/node/labels/v4.x", - "name": "v4.x", - "color": "eb6420", - "default": false - }, - { - "id": 364835500, - "url": "https://api.github.com/repos/nodejs/node/labels/v6.x", - "name": "v6.x", - "color": "c2e0c6", - "default": false - }, - { - "id": 441404503, - "url": "https://api.github.com/repos/nodejs/node/labels/v7.x", - "name": "v7.x", - "color": "fbca04", - "default": false - }, - { - "id": 176191361, - "url": "https://api.github.com/repos/nodejs/node/labels/V8 Engine", - "name": "V8 Engine", - "color": "0052cc", - "default": false - }, - { - "id": 386816750, - "url": "https://api.github.com/repos/nodejs/node/labels/V8_inspector", - "name": "V8_inspector", - "color": "ededed", - "default": false - }, - { - "id": 155436007, - "url": "https://api.github.com/repos/nodejs/node/labels/vm", - "name": "vm", - "color": "bfdadc", - "default": false - }, - { - "id": 166236401, - "url": "https://api.github.com/repos/nodejs/node/labels/windows", - "name": "windows", - "color": "9944dd", - "default": false - }, - { - "id": 151728680, - "url": "https://api.github.com/repos/nodejs/node/labels/wontfix", - "name": "wontfix", - "color": "ededed", - "default": true - }, - { - "id": 155436008, - "url": "https://api.github.com/repos/nodejs/node/labels/zlib", - "name": "zlib", - "color": "009800", - "default": false - } - ], - "meta": { - "x-ratelimit-limit":"60", - "x-ratelimit-remaining":"52", - "x-ratelimit-reset":"1531354196", - "x-github-request-id":"EBA1:936F:5CE9930:7925DDD:5B4692FA", - "x-github-media-type":"github.v3; format=json", - "link":"; rel=\"prev\", ; rel=\"first\"", - "etag":"\"9408108c2d89606f9539deefc6d90acd\"", - "status":"200 OK" - } -} diff --git a/test/_fixtures/repo-labels.json b/test/_fixtures/repo-labels.json deleted file mode 100644 index 46a461f1..00000000 --- a/test/_fixtures/repo-labels.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "data": [ - { - "url": "https://api.github.com/repos/nodejs/node/labels/confirmed-bug", - "name": "confirmed-bug", - "color": "fc2929" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/duplicate", - "name": "duplicate", - "color": "ededed" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/help%20wanted", - "name": "help wanted", - "color": "159818" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/invalid", - "name": "invalid", - "color": "ededed" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/question", - "name": "question", - "color": "cc317c" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/wontfix", - "name": "wontfix", - "color": "ededed" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/in%20progress", - "name": "in progress", - "color": "ededed" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/tls", - "name": "tls", - "color": "fad8c7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/crypto", - "name": "crypto", - "color": "009800" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/buffer", - "name": "buffer", - "color": "f7c6c7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/http", - "name": "http", - "color": "c7def8" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/https", - "name": "https", - "color": "0052cc" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/assert", - "name": "assert", - "color": "d4c5f9" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/util", - "name": "util", - "color": "d4c5f9" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/cluster", - "name": "cluster", - "color": "f7c6c7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/child_process", - "name": "child_process", - "color": "f7c6c7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/dgram", - "name": "dgram", - "color": "fbca04" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/c++", - "name": "c++", - "color": "e11d21" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/doc", - "name": "doc", - "color": "006b75" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/debugger", - "name": "debugger", - "color": "bfd4f2" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/dns", - "name": "dns", - "color": "fbca04" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/domain", - "name": "domain", - "color": "e11d21" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/events", - "name": "events", - "color": "bfdadc" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/fs", - "name": "fs", - "color": "0052cc" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/module", - "name": "module", - "color": "fbca04" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/net", - "name": "net", - "color": "eb6420" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/os", - "name": "os", - "color": "d4c5f9" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/querystring", - "name": "querystring", - "color": "5319e7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/readline", - "name": "readline", - "color": "d4c5f9" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/repl", - "name": "repl", - "color": "5319e7" - }, - { - "url": "https://api.github.com/repos/nodejs/node/labels/V8 Engine", - "name": "V8 Engine", - "color": "0052cc" - } - ], - "meta": { - "x-ratelimit-limit":"60", - "x-ratelimit-remaining":"53", - "x-ratelimit-reset":"1531354196", - "x-github-request-id":"EB9F:936D:4E2E967:6642386:5B469223", - "x-github-media-type":"github.v3; format=json", - "link":"; rel=\"next\", ; rel=\"last\"", - "etag":"\"86cc32d7673902f0b0774ab892d78f14\"", - "status":"200 OK" - } -} diff --git a/test/integration/event-relay-to-github-actions.test.js b/test/integration/event-relay-to-github-actions.test.js new file mode 100644 index 00000000..312de8ca --- /dev/null +++ b/test/integration/event-relay-to-github-actions.test.js @@ -0,0 +1,30 @@ +import test from 'node:test' +import fetchMock from 'fetch-mock' +import supertest from 'supertest' + +import { app, events } from '../../app.js' + +import readFixture from '../read-fixture.js' + +import eventRelay from '../../scripts/event-relay.js' + +eventRelay(app, events) + +test('Sends POST requests to https://api.github.com/repos/nodejs//dispatches', (t, done) => { + const jenkinsPayload = readFixture('success-payload.json') + + fetchMock.mockGlobal() + fetchMock.route('https://api.github.com/repos/nodejs/node/dispatches', 204) + + t.plan(2) + + supertest(app) + .post('/node/jenkins/start') + .send(jenkinsPayload) + .expect(200) + .end((err, res) => { + t.assert.strictEqual(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(), true) + done() + }) +}) diff --git a/test/integration/node-labels-webhook.test.js b/test/integration/node-labels-webhook.test.js deleted file mode 100644 index 5d05e1de..00000000 --- a/test/integration/node-labels-webhook.test.js +++ /dev/null @@ -1,173 +0,0 @@ -'use strict' - -const tap = require('tap') -const url = require('url') -const nock = require('nock') -const supertest = require('supertest') -const proxyquire = require('proxyquire') -const lolex = require('lolex') - -const testStubs = { - './github-secret': { - isValid: () => true, - - // necessary to make makes proxyquire return this stub - // whenever *any* module tries to require('./github-secret') - '@global': true - } -} - -const app = proxyquire('../../app', testStubs) - -const readFixture = require('../read-fixture') - -setupNoRequestMatchHandler() - -tap.test('Sends POST request to https://api.github.com/repos/nodejs/node/issues//labels', (t) => { - const clock = lolex.install() - const expectedLabels = ['timers'] - const webhookPayload = readFixture('pull-request-opened.json') - - const filesScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/pulls/19/files') - .reply(200, readFixture('pull-request-files.json')) - - const existingRepoLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/labels') - .reply(200, readFixture('repo-labels.json')) - - const newLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/issues/19/labels', expectedLabels) - .reply(200) - - t.plan(1) - t.tearDown(() => filesScope.done() && existingRepoLabelsScope.done() && newLabelsScope.done() && clock.uninstall()) - - supertest(app) - .post('/hooks/github') - .set('x-github-event', 'pull_request') - .send(webhookPayload) - .expect(200) - .end((err, res) => { - clock.runAll() - t.equal(err, null) - }) -}) - -tap.test('Adds v6.x label when PR is targeting the v6.x-staging branch', (t) => { - const clock = lolex.install() - const expectedLabels = ['timers', 'v6.x'] - const webhookPayload = readFixture('pull-request-opened-v6.x.json') - - const filesScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/pulls/19/files') - .reply(200, readFixture('pull-request-files.json')) - - const existingRepoLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/labels') - .reply(200, readFixture('repo-labels.json')) - - const newLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/issues/19/labels', expectedLabels) - .reply(200) - - t.plan(1) - t.tearDown(() => filesScope.done() && existingRepoLabelsScope.done() && newLabelsScope.done() && clock.uninstall()) - - supertest(app) - .post('/hooks/github') - .set('x-github-event', 'pull_request') - .send(webhookPayload) - .expect(200) - .end((err, res) => { - clock.runAll() - t.equal(err, null) - }) -}) - -// reported bug: https://github.com/nodejs/github-bot/issues/58 -tap.test('Does not create labels which does not already exist', (t) => { - const clock = lolex.install() - const webhookPayload = readFixture('pull-request-opened-mapproxy.json') - - const filesScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/pulls/7972/files') - .reply(200, readFixture('pull-request-files-mapproxy.json')) - - const existingRepoLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/labels') - .reply(200, readFixture('repo-labels.json')) - - t.plan(1) - t.tearDown(() => filesScope.done() && existingRepoLabelsScope.done() && clock.uninstall()) - - supertest(app) - .post('/hooks/github') - .set('x-github-event', 'pull_request') - .send(webhookPayload) - .expect(200) - .end((err, res) => { - clock.runAll() - t.equal(err, null) - }) -}) - -// reported bug: https://github.com/nodejs/github-bot/issues/92 -tap.test('Adds V8 Engine label when PR has deps/v8 file changes', (t) => { - const clock = lolex.install() - const expectedLabels = ['V8 Engine'] - const webhookPayload = readFixture('pull-request-opened-v8.json') - - const filesScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/pulls/9422/files') - .reply(200, readFixture('pull-request-files-v8.json')) - - const existingRepoLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/labels') - .reply(200, readFixture('repo-labels.json')) - - const newLabelsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/issues/9422/labels', expectedLabels) - .reply(200) - - t.plan(1) - t.tearDown(() => filesScope.done() && existingRepoLabelsScope.done() && newLabelsScope.done() && clock.uninstall()) - - supertest(app) - .post('/hooks/github') - .set('x-github-event', 'pull_request') - .send(webhookPayload) - .expect(200) - .end((err, res) => { - clock.runAll() - t.equal(err, null) - }) -}) - -function ignoreQueryParams (pathAndQuery) { - return url.parse(pathAndQuery, true).pathname -} - -// nock doesn't make the tests explode if an unexpected external request is made, -// we therefore have to attach an explicit "no match" handler too make tests fail -// if there's made outgoing request we didn't expect -function setupNoRequestMatchHandler () { - nock.emitter.on('no match', (req) => { - // requests against the app is expected and we shouldn't need to tell nock about it - if (req.hostname === '127.0.0.1') return - - const reqUrl = `${req._headers.host}${req.path}` - throw new Error(`Unexpected request was sent to ${reqUrl}`) - }) -} diff --git a/test/integration/ping.test.js b/test/integration/ping.test.js index 104095a7..1d2e3936 100644 --- a/test/integration/ping.test.js +++ b/test/integration/ping.test.js @@ -1,21 +1,33 @@ -'use strict' +import http from 'node:http' -const tap = require('tap') -const request = require('request') +import test from 'node:test' -const app = require('../../app') +import { app, events } from '../../app.js' -tap.test('GET /ping responds with status 200 / "pong"', (t) => { +import ping from '../../scripts/ping.js' + +ping(app, events) + +test('GET /ping responds with status 200 / "pong"', (t, done) => { const server = app.listen() const port = server.address().port const url = `http://localhost:${port}/ping` - t.plan(3) - t.tearDown(() => server.close()) + t.plan(2) + t.after(() => server.close()) + + http.get(url, (res) => { + t.assert.strictEqual(res.statusCode, 200) - request(url, (err, res, body) => { - t.equal(err, null) - t.equal(res.statusCode, 200) - t.equal(res.body, 'pong') + let data = '' + res.on('data', (chunk) => { + data += chunk + }) + res.on('end', () => { + t.assert.strictEqual(data, 'pong') + done() + }) + }).on('error', (e) => { + t.fail(e) }) }) diff --git a/test/integration/push-jenkins-update.test.js b/test/integration/push-jenkins-update.test.js index 9db69941..787bfd5c 100644 --- a/test/integration/push-jenkins-update.test.js +++ b/test/integration/push-jenkins-update.test.js @@ -1,108 +1,174 @@ -'use strict' +import test from 'node:test' +import fetchMock from 'fetch-mock' +import supertest from 'supertest' -const tap = require('tap') -const url = require('url') -const nock = require('nock') -const supertest = require('supertest') +import { app, events } from '../../app.js' -const app = require('../../app') +import readFixture from '../read-fixture.js' -const readFixture = require('../read-fixture') +import jenkinsStatus from '../../scripts/jenkins-status.js' -tap.test('Sends POST requests to https://api.github.com/repos/nodejs/node/statuses/', (t) => { +fetchMock.config.overwriteRoutes = true +fetchMock.mockGlobal() + +jenkinsStatus(app, events) + +test('Sends POST requests to https://api.github.com/repos/nodejs/node/statuses/', (t, done) => { const jenkinsPayload = readFixture('success-payload.json') - const prCommitsScope = setupGetCommitsMock('node') - const scope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1') - .reply(201) + const listCommitsUrl = setupListCommitsMock('node') - t.plan(1) - t.tearDown(() => prCommitsScope.done() && scope.done()) + const url = 'https://api.github.com/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1' + fetchMock.route({ url, method: 'POST' }, 201) + + t.plan(3) supertest(app) .post('/node/jenkins/start') .send(jenkinsPayload) - .expect(201) + .expect(200) .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(fetchMock.callHistory.called(listCommitsUrl), true) + done() }) }) -tap.test('Allows repository name to be provided with URL parameter when pushing job started', (t) => { +test('Allows repository name to be provided with URL parameter when pushing job started', (t, done) => { const jenkinsPayload = readFixture('pending-payload.json') - const prCommitsScope = setupGetCommitsMock('citgm') - const scope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/citgm/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1') - .reply(201) + const listCommitsUrl = setupListCommitsMock('citgm') - t.plan(1) - t.tearDown(() => prCommitsScope.done() && scope.done()) + const url = 'https://api.github.com/repos/nodejs/citgm/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1' + fetchMock.route({ url, method: 'POST' }, 201) + + t.plan(3) supertest(app) .post('/citgm/jenkins/start') .send(jenkinsPayload) - .expect(201) + .expect(200) .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(fetchMock.callHistory.called(listCommitsUrl), true) + done() }) }) -tap.test('Allows repository name to be provided with URL parameter when pushing job ended', (t) => { +test('Allows repository name to be provided with URL parameter when pushing job ended', (t, done) => { const jenkinsPayload = readFixture('success-payload.json') - const prCommitsScope = setupGetCommitsMock('citgm') - const scope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/citgm/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1') - .reply(201) + const listCommitsUrl = setupListCommitsMock('citgm') - t.plan(1) - t.tearDown(() => prCommitsScope.done() && scope.done()) + const url = 'https://api.github.com/repos/nodejs/citgm/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1' + fetchMock.route({ url, method: 'POST' }, 201) + + t.plan(3) supertest(app) .post('/citgm/jenkins/end') .send(jenkinsPayload) - .expect(201) + .expect(200) .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(fetchMock.callHistory.called(listCommitsUrl), true) + done() }) }) -tap.test('Forwards payload provided in incoming POST to GitHub status API', (t) => { +test('Forwards payload provided in incoming POST to GitHub status API', (t, done) => { const fixture = readFixture('success-payload.json') - const prCommitsScope = setupGetCommitsMock('node') - const scope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1', { - state: 'success', - context: 'test/osx', - description: 'tests passed', - target_url: 'https://ci.nodejs.org/job/node-test-commit-osx/3157/' - }) - .reply(201) + const listCommitsUrl = setupListCommitsMock('node') - t.plan(1) - t.tearDown(() => prCommitsScope.done() && scope.done()) + const url = 'https://api.github.com/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1' + const body = { + state: 'success', + context: 'test/osx', + description: 'tests passed', + target_url: 'https://ci.nodejs.org/job/node-test-commit-osx/3157/' + } + fetchMock.route({ url, method: 'POST', body }, 201) + + t.plan(3) + + supertest(app) + .post('/node/jenkins/start') + .send(fixture) + .expect(200) + .end((err, res) => { + t.assert.strictEqual(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(fetchMock.callHistory.called(listCommitsUrl), true) + done() + }) +}) + +test('Posts a CI comment in the related PR when Jenkins build is named node-test-pull-request', (t, done) => { + const fixture = readFixture('jenkins-test-pull-request-success-payload.json') + + const url = 'https://api.github.com/repos/nodejs/node/issues/12345/comments' + const body = { body: 'CI: https://ci.nodejs.org/job/node-test-pull-request/21633/' } + fetchMock.route({ url, method: 'POST', body }, 200) + + // we don't care about asserting the scopes below, just want to stop the requests from actually being sent + setupListCommitsMock('node') + fetchMock.route( + { + url: 'https://api.github.com/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1', + method: 'POST' + }, 201) + + t.plan(2) supertest(app) .post('/node/jenkins/start') .send(fixture) - .expect(201) + .expect(200) .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(err, null) + done() }) }) -tap.test('Responds with 400 / "Bad request" when incoming request has invalid payload', (t) => { +test('Posts a CI comment in the related PR when Jenkins build is named node-test-pull-request-lite-pipeline', (t, done) => { + const fixture = readFixture('jenkins-test-pull-request-success-payload.json') + fixture.identifier = 'node-test-pull-request-lite-pipeline' + + const url = 'https://api.github.com/repos/nodejs/node/issues/12345/comments' + const body = { body: 'Lite-CI: https://ci.nodejs.org/job/node-test-pull-request/21633/' } + fetchMock.route({ url, body, method: 'POST' }, 200) + + // we don't care about asserting the scopes below, just want to stop the requests from actually being sent + setupListCommitsMock('node') + fetchMock.route( + { + url: 'https://api.github.com/repos/nodejs/node/statuses/8a5fec2a6bade91e544a30314d7cf21f8a200de1', + method: 'POST' + }, 201) + + t.plan(2) + + supertest(app) + .post('/node/jenkins/start') + .send(fixture) + .expect(200) + .end((err, res) => { + t.assert.strictEqual(fetchMock.callHistory.called(url), true) + t.assert.strictEqual(err, null) + done() + }) +}) + +test('Responds with 400 / "Bad request" when incoming request has invalid payload', (t, done) => { const fixture = readFixture('invalid-payload.json') // don't care about the results, just want to prevent any HTTP request ever being made - nock('https://api.github.com') + fetchMock.route('https://api.github.com', 200) t.plan(1) @@ -111,15 +177,16 @@ tap.test('Responds with 400 / "Bad request" when incoming request has invalid pa .send(fixture) .expect(400, 'Invalid payload') .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + done() }) }) -tap.test('Responds with 400 / "Bad request" when build started status update is not related to a pull request', (t) => { +test('Responds with 400 / "Bad request" when build started status update is not related to a pull request', (t, done) => { const fixture = readFixture('jenkins-staging-failure-payload.json') // don't care about the results, just want to prevent any HTTP request ever being made - nock('https://api.github.com') + fetchMock.route('https://api.github.com', 200) t.plan(1) @@ -128,15 +195,16 @@ tap.test('Responds with 400 / "Bad request" when build started status update is .send(fixture) .expect(400, 'Will only push builds related to pull requests') .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + done() }) }) -tap.test('Responds with 400 / "Bad request" when build ended status update is not related to a pull request', (t) => { +test('Responds with 400 / "Bad request" when build ended status update is not related to a pull request', (t, done) => { const fixture = readFixture('jenkins-staging-failure-payload.json') // don't care about the results, just want to prevent any HTTP request ever being made - nock('https://api.github.com') + fetchMock.route('https://api.github.com/', 200) t.plan(1) @@ -145,15 +213,16 @@ tap.test('Responds with 400 / "Bad request" when build ended status update is no .send(fixture) .expect(400, 'Will only push builds related to pull requests') .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + done() }) }) -tap.test('Responds with 400 / "Bad request" when incoming providing invalid repository name', (t) => { +test('Responds with 400 / "Bad request" when incoming providing invalid repository name', (t, done) => { const fixture = readFixture('pending-payload.json') // don't care about the results, just want to prevent any HTTP request ever being made - nock('https://api.github.com') + fetchMock.route('https://api.github.com/', 200) t.plan(1) @@ -162,19 +231,15 @@ tap.test('Responds with 400 / "Bad request" when incoming providing invalid repo .send(fixture) .expect(400, 'Invalid repository') .end((err, res) => { - t.equal(err, null) + t.assert.strictEqual(err, null) + done() }) }) -function setupGetCommitsMock (repoName) { +function setupListCommitsMock (repoName) { const commitsResponse = readFixture('pr-commits.json') + const url = `https://api.github.com/repos/nodejs/${repoName}/pulls/12345/commits` - return nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get(`/repos/nodejs/${repoName}/pulls/12345/commits`) - .reply(200, commitsResponse) -} - -function ignoreQueryParams (pathAndQuery) { - return url.parse(pathAndQuery, true).pathname + fetchMock.route(url, commitsResponse) + return url } diff --git a/test/integration/trigger-jenkins-build.test.js b/test/integration/trigger-jenkins-build.test.js deleted file mode 100644 index b4051198..00000000 --- a/test/integration/trigger-jenkins-build.test.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict' - -const tap = require('tap') -const url = require('url') -const nock = require('nock') -const supertest = require('supertest') -const proxyquire = require('proxyquire') -const lolex = require('lolex') -const readFixture = require('../read-fixture') - -const app = proxyquire('../../app', { - './github-secret': { - isValid: () => true, - - // necessary to make makes proxyquire return this stub - // whenever *any* module tries to require('./github-secret') - '@global': true - } -}) - -tap.test('Sends POST request to https://ci.nodejs.org', (t) => { - const clock = lolex.install() - - const originalJobUrlValue = process.env.JENKINS_JOB_URL_NODE - const originalTokenValue = process.env.JENKINS_BUILD_TOKEN_NODE - process.env.JENKINS_JOB_NODE = 'node-test-pull-request-lite-pipeline' - process.env.JENKINS_BUILD_TOKEN_NODE = 'myToken' - - const webhookPayload = readFixture('pull-request-opened.json') - const pipelineUrl = 'https://ci.nodejs.org/blue/organizations/jenkins/node-test-pull-request-lite-pipeline/detail/node-test-pull-request-lite-pipeline/1/pipeline' - - const collaboratorsScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .get('/repos/nodejs/node/collaborators/phillipj') - .reply(200, { permission: 'admin' }) - const ciJobScope = nock('https://ci.nodejs.org') - .filteringPath(ignoreQueryParams) - .post('/blue/rest/organizations/jenkins/pipelines/node-test-pull-request-lite-pipeline/runs/') - .reply(200, { id: 1 }, {}) - - const commentScope = nock('https://api.github.com') - .filteringPath(ignoreQueryParams) - .post('/repos/nodejs/node/issues/19/comments', { body: `@phillipj build started: ${pipelineUrl}` }) - .reply(200) - - t.plan(1) - t.tearDown(() => collaboratorsScope.done() && ciJobScope.done() && commentScope.done() && clock.uninstall()) - - supertest(app) - .post('/hooks/github') - .set('x-github-event', 'pull_request') - .send(webhookPayload) - .expect(200) - .end((err, res) => { - process.env.JENKINS_JOB_URL_NODE = originalJobUrlValue - process.env.JENKINS_BUILD_TOKEN_NODE = originalTokenValue - clock.runAll() - t.equal(err, null) - }) -}) - -function ignoreQueryParams (pathAndQuery) { - return url.parse(pathAndQuery, true).pathname -} diff --git a/test/read-fixture.js b/test/read-fixture.js index dcf9597c..6c67abe7 100644 --- a/test/read-fixture.js +++ b/test/read-fixture.js @@ -1,9 +1,7 @@ -'use strict' +import fs from 'node:fs' +import path from 'node:path' -const fs = require('fs') -const path = require('path') - -module.exports = function readFixture (fixtureName) { - const content = fs.readFileSync(path.join(__dirname, '_fixtures', fixtureName)).toString() - return JSON.parse(content) +export default function readFixture (fixtureName) { + const content = fs.readFileSync(path.join(import.meta.dirname, '_fixtures', fixtureName)).toString() + return fixtureName.endsWith('.json') ? JSON.parse(content) : content } diff --git a/test/unit/bot-username.test.js b/test/unit/bot-username.test.js deleted file mode 100644 index db9fbe60..00000000 --- a/test/unit/bot-username.test.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict' - -const proxyquire = require('proxyquire') -const sinon = require('sinon') -const tap = require('tap') - -const githubClient = require('../../lib/github-client') - -tap.test('botUsername.resolve(): returns username of current user', (t) => { - sinon.stub(githubClient.users, 'get').yields(null, { login: 'nodejs-github-bot' }) - const botUsername = proxyquire('../../lib/bot-username', { - './github-client': githubClient - }) - - t.plan(1) - t.tearDown(() => { - githubClient.users.get.restore() - }) - - botUsername.resolve((_, username) => { - t.same(username, 'nodejs-github-bot') - }) -}) diff --git a/test/unit/node-build-label.test.js b/test/unit/node-build-label.test.js deleted file mode 100644 index da0b4746..00000000 --- a/test/unit/node-build-label.test.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -const tap = require('tap') - -const nodeLabels = require('../../lib/node-labels') - -tap.test('label: "build" when build related files has been changed', (t) => { - const buildRelatedFiles = [ - 'configure', - 'node.gyp', - 'common.gypi', - 'BSDmakefile', - 'Makefile', - 'tools/Makefile', - 'tools/install.py', - 'tools/create_android_makefiles', - 'tools/genv8constants.py', - 'tools/getnodeversion.py', - 'tools/js2c.py', - 'tools/utils.py', - 'tools/configure.d/nodedownload.py' - ] - - buildRelatedFiles.forEach((filepath) => { - const labels = nodeLabels.resolveLabels([ filepath ]) - - t.same(labels, ['build'], filepath + ' got "build" label') - }) - - t.end() -}) - -tap.test('labels: not "build" when Makefile in ./deps has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/Makefile' - ]) - - t.notOk(labels.includes('build')) - - t.end() -}) diff --git a/test/unit/node-js-subsystem-labels.test.js b/test/unit/node-js-subsystem-labels.test.js deleted file mode 100644 index 909f6e62..00000000 --- a/test/unit/node-js-subsystem-labels.test.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict' - -const tap = require('tap') - -const nodeLabels = require('../../lib/node-labels') - -tap.test('label: lib oddities', (t) => { - const libFiles = [ - 'lib/_debug_agent.js', - 'lib/_http_agent.js', - 'lib/_http_client.js', - 'lib/_http_common.js', - 'lib/_http_incoming.js', - 'lib/_http_outgoing.js', - 'lib/_http_server.js', - 'lib/_linklist.js', - 'lib/_stream_duplex.js', - 'lib/_stream_passthrough.js', - 'lib/_stream_readable.js', - 'lib/_stream_transform.js', - 'lib/_stream_wrap.js', - 'lib/_stream_writable.js', - 'lib/_tls_common.js', - 'lib/_tls_legacy.js', - 'lib/_tls_wrap.js', - 'lib/constants.js', - 'lib/punycode.js', // ignored - 'lib/sys.js', // ignored - 'lib/internal/freelist.js', // ignored - 'lib/internal/process', - 'lib/internal/readme.md', // ignored - 'lib/internal/socket_list.js', - 'lib/internal/v8_prof_polyfill.js', - 'lib/internal/v8_prof_processor.js' - ] - - const labels = nodeLabels.resolveLabels(libFiles, false) - - t.same(labels, [ - 'debugger', // _debug_agent - 'http', // _http_* - 'timers', // linklist - 'stream', // _stream_* - 'tls', // _tls_* - 'lib / src', // constants - 'process', // internal/process/ - 'net', // socket_list - 'tools' // v8_prof_* - ]) - - t.end() -}) - -tap.test('label: lib internals oddities duplicates', (t) => { - const libFiles = [ - 'lib/internal/bootstrap_node.js', - 'lib/internal/linkedlist.js', - 'lib/internal/streams' - ] - - const labels = nodeLabels.resolveLabels(libFiles) - - t.same(labels, [ - 'lib / src', // bootstrap_node - 'timers', // linkedlist - 'stream' // internal/streams/ - ]) - - t.end() -}) - -tap.test('label: lib normal without "lib / src" limiting', (t) => { - const libFiles = [ - 'lib/_debugger.js', - 'lib/assert.js', - 'lib/buffer.js', - 'lib/child_process.js', - 'lib/cluster.js', - 'lib/console.js', - 'lib/crypto.js', - 'lib/dgram.js', - 'lib/dns.js', - 'lib/domain.js', - 'lib/events.js', - 'lib/fs.js', - 'lib/http.js', - 'lib/https.js', - 'lib/module.js', - 'lib/net.js', - 'lib/os.js', - 'lib/path.js', - 'lib/process.js', - 'lib/querystring.js', - 'lib/readline.js', - 'lib/repl.js', - 'lib/stream.js', - 'lib/string_decoder.js', - 'lib/timers.js', - 'lib/tls.js', - 'lib/tty.js', - 'lib/url.js', - 'lib/util.js', - 'lib/v8.js', - 'lib/vm.js', - 'lib/zlib.js' - ] - - const labels = nodeLabels.resolveLabels(libFiles, false) - - t.same(labels, libFiles.map((path) => /lib\/(_)?(\w+)\.js/.exec(path)[2])) - - t.end() -}) - -tap.test('label: lib internals without "lib / src" limiting', (t) => { - const libFiles = [ - 'lib/internal/child_process.js', - 'lib/internal/cluster.js', - 'lib/internal/module.js', - 'lib/internal/net.js', - 'lib/internal/process.js', - 'lib/internal/readline.js', - 'lib/internal/repl.js', - 'lib/internal/util.js' - ] - - const labels = nodeLabels.resolveLabels(libFiles, false) - - t.same(labels, libFiles.map((path) => /lib\/internal\/(\w+)\.js/.exec(path)[1])) - - t.end() -}) - -tap.test('label: add subsystem when ./doc/api/.md has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'doc/api/fs.md' - ], false) - - t.same(labels, ['doc', 'fs']) - - t.end() -}) - -tap.test('label: only "doc" with multiple API doc files changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'doc/api/fs.md', - 'doc/api/stream.md' - ], false) - - t.same(labels, ['doc']) - - t.end() -}) - -tap.test('label: "doc,module" when doc/api/modules.md was changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'doc/api/modules.md' - ], false) - - t.same(labels, ['doc', 'module']) - - t.end() -}) - -tap.test('label: appropriate labels for files in internal subdirectories', (t) => { - const labels = nodeLabels.resolveLabels([ - 'lib/internal/cluster/master.js', - 'lib/internal/process/next_tick.js' - ], false) - - t.same(labels, ['cluster', 'process']) - - t.end() -}) diff --git a/test/unit/node-labels.test.js b/test/unit/node-labels.test.js deleted file mode 100644 index 5705a29b..00000000 --- a/test/unit/node-labels.test.js +++ /dev/null @@ -1,632 +0,0 @@ -'use strict' - -const tap = require('tap') - -const nodeLabels = require('../../lib/node-labels') - -tap.test('no labels: when ./test/ and ./doc/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'test/debugger/test-debugger-pid.js', - 'doc/api/fs.md' - ]) - - t.same(labels, []) - - t.end() -}) - -// This ensures older mislabelling issues doesn't happen again -// https://github.com/nodejs/node/pull/6432 -// https://github.com/nodejs/node/pull/6448 -tap.test('no labels: when ./test/ and ./lib/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'lib/punycode.js', - 'test/parallel/test-assert.js' - ]) - - t.same(labels, []) - - t.end() -}) - -tap.test('label: "doc" when only ./doc/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'doc/api/fs.md', - 'doc/api/http.md', - 'doc/onboarding.md' - ]) - - t.same(labels, ['doc']) - - t.end() -}) - -tap.test('label: "c++" when ./src/* has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'src/node.cc' - ]) - - t.same(labels, ['c++']) - - t.end() -}) - -const srcCases = [ - [ 'async_wrap', ['async-wrap-inl.h', 'async-wrap.h', 'async-wrap.cc'] ], - [ 'buffer', - ['base64.h', - 'node_buffer.cc', - 'node_buffer.h', - 'string_bytes.cc', - 'string_bytes.h', - 'string_search.cc', - 'string_search.h'] ], - [ 'cares', ['cares_wrap.cc'] ], - [ 'child_process', ['process_wrap.cc', 'spawn_sync.cc', 'spawn_sync.h'] ], - [ 'crypto', - ['node_crypto.cc', - 'node_crypto.h', - 'node_crypto_bio.cc', - 'node_crypto_bio.h', - 'node_crypto_clienthello-inl.h', - 'node_crypto_clienthello.cc', - 'node_crypto_clienthello.h', - 'node_crypto_groups.h'] ], - [ 'debugger', ['debug-agent.cc', 'debug-agent.h', 'node_debug_options.cc'] ], - [ 'dgram', ['udp_wrap.cc', 'udp_wrap.h'] ], - [ 'fs', - ['fs_event_wrap.cc', - 'node_file.cc', - 'node_file.h', - 'node_stat_watcher.cc', - 'node_stat_watcher.h'] ], - [ 'http_parser', ['node_http_parser.cc', 'node_http_parser.h'] ], - [ 'intl', ['node_i18n.cc', 'node_i18n.h'] ], - [ 'libuv', ['uv.cc'] ], - [ 'net', - ['connect_wrap.cc', - 'connect_wrap.h', - 'connection_wrap.cc', - 'connection_wrap.h', - 'pipe_wrap.cc', - 'pipe_wrap.h', - 'tcp_wrap.cc', - 'tcp_wrap.h'] ], - [ 'os', ['node_os.cc'] ], - [ 'process', ['node_main.cc', 'signal_wrap.cc'] ], - [ 'timers', ['timer_wrap.cc'] ], - [ 'tracing', - ['tracing/agent.cc', - 'tracing/agent.h', - 'tracing/node_trace_buffer.cc', - 'tracing/node_trace_buffer.h', - 'tracing/node_trace_writer.cc', - 'tracing/node_trace_writer.h', - 'tracing/trace_event.cc', - 'tracing/trace_event.h'] ], - [ 'tls', - ['CNNICHashWhitelist.inc', - 'node_root_certs.h', - 'tls_wrap.cc', - 'tls_wrap.h'] ], - [ 'tty', ['tty_wrap.cc', 'tty_wrap.h'] ], - [ ['url-whatwg'], - ['node_url.cc', 'node_url.h'] ], - [ 'util', ['node_util.cc'] ], - [ 'V8 Engine', ['node_v8.cc', 'v8abbr.h'] ], - [ 'vm', ['node_contextify.cc'] ], - [ 'windows', - ['backtrace_win32.cc', - 'node_win32_etw_provider-inl.h', - 'node_win32_etw_provider.cc', - 'node_win32_etw_provider.h', - 'node_win32_perfctr_provider.cc', - 'node_win32_perfctr_provider.h'] ], - [ 'zlib', ['node_zlib.cc'] ] -] -for (const info of srcCases) { - let labels = info[0] - if (!Array.isArray(labels)) { - labels = [labels] - } - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./src/${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([`src/${file}`]) - - t.same(resolved, ['c++'].concat(labels)) - - t.end() - }) - } -} - -tap.test('label: not "c++" when ./src/node_version.h has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'src/node_version.h' - ]) - - t.same(labels, []) - - t.end() -}) - -tap.test('label: not "c++" when ./src/*.py has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'src/nolttng_macros.py', - 'src/notrace_macros.py', - 'src/perfctr_macros.py' - ]) - - t.same(labels, ['lib / src']) - - t.end() -}) - -tap.test('label: "inspector" when ./src/inspector_* has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'src/inspector_socket.cc' - ]) - - t.same(labels, ['c++', 'inspector']) - - t.end() -}) - -tap.test('label: "V8 Engine" when ./deps/v8/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/src/arguments.cc' - ]) - - t.same(labels, ['V8 Engine']) - - t.end() -}) - -tap.test('label: "libuv" when ./deps/uv/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/uv/src/fs-poll.c' - ]) - - t.same(labels, ['libuv']) - - t.end() -}) - -tap.test('label: "V8 Engine", "openssl" when ./deps/v8/ and ./deps/openssl/ files has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/src/arguments.cc', - 'deps/openssl/openssl/ssl/ssl_rsa.c' - ]) - - t.same(labels, ['V8 Engine', 'openssl']) - - t.end() -}) - -// -// Planned tests to be resolved later -// - -tap.test('label: "repl" when ./lib/repl.js has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'lib/repl.js', - 'test/debugger/test-debugger-pid.js', - 'test/debugger/test-debugger-repl-break-in-module.js', - 'test/debugger/test-debugger-repl-term.js' - ]) - - t.same(labels, ['repl']) - - t.end() -}) - -tap.test('label: "lib / src" when 4 or more JS sub-systems have been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'lib/assert.js', - 'lib/dns.js', - 'lib/repl.js', - 'lib/process.js', - 'lib/module.js' - ]) - - t.same(labels, ['lib / src']) - - t.end() -}) - -// https://github.com/nodejs/node/pull/12366 should have been labelled "lib / src" -// https://github.com/nodejs/github-bot/issues/137 -tap.test('label: "lib / src" when 4 or more native files have been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'node.gyp', - 'src/cares_wrap.cc', - 'src/fs_event_wrap.cc', - 'src/node.cc', - 'src/node_api.cc', - 'src/node_buffer.cc', - 'src/node_config.cc', - 'src/node_constants.cc', - 'src/node_contextify.cc', - 'src/node_file.cc', - 'src/node_file.h', - 'src/node_http_parser.cc', - 'src/node_http_parser.h', - 'src/node_i18n.cc', - 'src/node_revert.cc', - 'src/node_serdes.cc', - 'src/node_zlib.cc', - 'src/process_wrap.cc', - 'src/signal_wrap.cc', - 'src/string_bytes.cc', - 'src/timer_wrap.cc', - 'src/uv.cc' - ]) - - t.same(labels, ['c++', 'lib / src']) - - t.end() -}) - -// https://github.com/nodejs/node/pull/7488 wrongfully labelled with "lib / src" -tap.test('label: not "lib / src" when only deps have been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/test/cctest/interpreter/bytecode_expectations/ArrayLiterals.golden', - 'deps/v8/test/cctest/interpreter/bytecode_expectations/ArrayLiteralsWide.golden', - 'deps/v8/test/cctest/interpreter/bytecode_expectations/AssignmentsInBinaryExpression.golden', - 'deps/v8/test/cctest/interpreter/bytecode_expectations/BasicBlockToBoolean.golden', - 'deps/v8/test/cctest/interpreter/bytecode_expectations/BasicLoops.golden' - ]) - - t.same(labels, ['V8 Engine']) - - t.end() -}) - -tap.test('label: "JS sub-systems when less than 4 sub-systems have changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'lib/assert.js', - 'lib/dns.js', - 'lib/repl.js', - 'lib/process.js' - ]) - - t.same(labels, ['assert', 'dns', 'repl', 'process']) - - t.end() -}) - -tap.test('label: "meta" when meta-info files have changed', (t) => { - // e.g. LICENSE, AUTHORS, some ./*.md files - const labels = nodeLabels.resolveLabels([ - '.gitattributes', - '.gitignore', - '.mailmap', - 'AUTHORS', - 'LICENSE', - 'CHANGELOG.md', - 'CODE_OF_CONDUCT.md', - 'GOVERNANCE.md', - 'ROADMAP.md', - 'WORKING_GROUPS.md' - ]) - - t.same(labels, ['meta']) - - t.end() -}) - -tap.test('label: not "meta" when other top-level have been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'BUILDING.md', - 'README.md', - 'COLLABORATOR_GUIDE.md', - 'CONTRIBUTING.md', - 'configure' - ]) - - t.same(labels.indexOf('meta'), -1) - - t.end() -}) - -tap.test('label: "doc" when top-level .md files have changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'BUILDING.md', - 'README.md' - ]) - - t.same(labels, ['build', 'doc']) - - t.end() -}) - -tap.test('label: not "doc" when other top-level files have been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'LICENSE', - 'configure', - '.mailmap' - ]) - - t.same(labels.indexOf('doc'), -1) - - t.end() -}) - -tap.test('label: version labels (old)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'common.gypi' - ], 'v0.12') - - t.same(labels, ['build', 'v0.12']) - - t.end() -}) - -tap.test('label: version labels (old, staging)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'common.gypi' - ], 'v0.12-staging') - - t.same(labels, ['build', 'v0.12']) - - t.end() -}) - -tap.test('label: version labels (new)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/include/v8-version.h', - 'deps/v8/src/crankshaft/hydrogen.cc', - 'deps/v8/test/mjsunit/regress/regress-5033.js' - ], 'v6.x') - - t.same(labels, ['V8 Engine', 'v6.x']) - - t.end() -}) - -tap.test('label: version labels (new, staging)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/include/v8-version.h', - 'deps/v8/src/crankshaft/hydrogen.cc', - 'deps/v8/test/mjsunit/regress/regress-5033.js' - ], 'v6.x-staging') - - t.same(labels, ['V8 Engine', 'v6.x']) - - t.end() -}) - -tap.test('label: no version labels (master)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'deps/v8/include/v8-version.h', - 'deps/v8/src/crankshaft/hydrogen.cc', - 'deps/v8/test/mjsunit/regress/regress-5033.js' - ], 'master') - - t.same(labels, ['V8 Engine']) - - t.end() -}) - -tap.test('label: build label (windows)', (t) => { - const labels = nodeLabels.resolveLabels([ - 'vcbuild.bat' - ]) - - t.same(labels, ['build', 'windows']) - - t.end() -}) - -tap.test('label: doc label for non-subsystem API doc changes', (t) => { - const labels = nodeLabels.resolveLabels([ - 'doc/api/_toc.md', - 'doc/api/all.md' - ]) - - t.same(labels, ['doc']) - - t.end() -}) - -const specificBenchmarks = [ - [ [], ['fixtures/alice.html', 'misc/freelist.js'] ], - [ 'assert', ['assert/deepequal-buffer.js'] ], - [ 'buffer', ['buffers/buffer-base64-decode.js'] ], - [ 'child_process', ['child_process/child-process-exec-stdout.js'] ], - [ 'crypto', ['crypto/aes-gcm-throughput.js'] ], - [ 'dgram', ['dgram/bind-params.js'] ], - [ 'domain', ['domain/domain-fn-args.js'] ], - [ 'events', ['events/ee-emit.js'] ], - [ 'fs', ['fs/readfile.js'] ], - [ 'http', ['_http-benchmarkers.js', 'http/simple.js'] ], - [ 'module', ['module/module-loader.js'] ], - [ 'net', ['net/net-c2s.js'] ], - [ 'os', ['os/loadavg.js'] ], - [ 'path', ['path/basename-posix.js'] ], - [ 'process', ['process/memoryUsage.js'] ], - [ 'querystring', ['querystring/querystring-parse.js'] ], - [ 'stream', ['streams/readable-readall.js'] ], - [ 'string_decoder', ['string_decoder/string-decoder.js'] ], - [ 'timers', ['timers/set-immediate-depth.js'] ], - [ 'tls', ['tls/throughput.js'] ], - [ 'url', ['url/url-resolve.js'] ], - [ 'util', ['util/format.js'] ], - [ 'V8 Engine', ['arrays/var-int.js', 'es/defaultparams-bench.js'] ], - [ 'vm', ['vm/run-in-context.js'] ] -] -for (const info of specificBenchmarks) { - let labels = info[0] - if (!Array.isArray(labels)) { - labels = ['benchmark', labels] - } else { - labels = ['benchmark'].concat(labels) - } - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./benchmark/${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([`benchmark/${file}`]) - - t.same(resolved, labels) - - t.end() - }) - } -} - -const moreTools = [ - '.eslintignore', '.editorconfig', '.eslintrc.yaml', '.remarkrc' -] -for (const file of moreTools) { - tap.test(`label: "tools" when ${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([`${file}`]) - - t.same(resolved, ['tools']) - - t.end() - }) -} - -const specificTests = [ - [ 'addons', ['addons/async-hello-world/binding.cc'] ], - [ 'debugger', ['debugger/test-debugger-repl.js'] ], - [ ['doc', 'tools'], ['doctool/test-doctool-html.js'] ], - [ ['inspector'], - ['inspector/test-inspector.js', 'cctest/test_inspector_socket.cc'] ], - [ 'timers', ['timers/test-timers-reliability.js'] ], - [ 'tty', ['pseudo-tty/stdin-setrawmode.js'] ], - [ ['url-whatwg'], - ['cctest/test_url.cc'] ] -] -for (const info of specificTests) { - let labels = info[0] - if (!Array.isArray(labels)) { - labels = ['test', labels] - } else { - labels = ['test'].concat(labels) - } - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./test/${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([`test/${file}`]) - - t.same(resolved, labels) - - t.end() - }) - } -} - -const specificTools = [ - [ 'build', ['gyp/gyp_main.py', 'gyp_node.py'] ], - [ 'doc', ['doc/generate.js'] ], - [ 'intl', ['icu/icu-generate.gyp'] ], - [ 'macos', - ['macosx-firewall.sh', - 'osx-codesign.sh' ] ], - [ ['macos', 'install'], - ['osx-pkg.pmdoc/index.xml.tmpl', - 'pkgsrc/description' ] ], - [ ['test', 'npm'], ['test-npm.sh', 'test-npm-package.js'] ], - [ ['test'], ['test.py'] ], - [ ['openssl', 'tls'], ['certdata.txt', 'mkssldef.py', 'mk-ca-bundle.pl'] ], - [ ['windows'], ['sign.bat'] ], - [ ['windows', 'install'], ['msvs/msi/product.wxs'] ], - [ ['V8 Engine'], ['make-v8.sh'] ] -] -for (const info of specificTools) { - let labels = info[0] - if (!Array.isArray(labels)) { - labels = ['tools', labels] - } else { - labels = ['tools'].concat(labels) - } - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./tools/${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([`tools/${file}`]) - - t.same(resolved, labels) - - t.end() - }) - } -} - -[ - [ ['V8 Engine', 'post-mortem'], - ['deps/v8/tools/gen-postmortem-metadata.py'] ], - [ ['c++', 'n-api'], - ['src/node_api.cc', 'src/node_api.h', 'src/node_api_types.h'] ], - [ ['test', 'n-api'], - ['test/addons-napi/foo'] ], - [ ['doc', 'n-api'], - ['doc/api/n-api.md'] ] -].forEach((info) => { - const labels = info[0] - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([file]) - - t.same(resolved, labels) - - t.end() - }) - } -}); - -[ - [ ['async_hooks'], ['lib/async_hooks.js'] ], - [ ['test', 'async_hooks'], ['test/async-hooks/test-connection.ssl.js'] ] -].forEach((info) => { - const labels = info[0] - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([file]) - - t.same(resolved, labels) - - t.end() - }) - } -}) - -tap.test('label: "build" when ./android-configure has been changed', (t) => { - const labels = nodeLabels.resolveLabels([ - 'android-configure' - ]) - - t.same(labels, ['build']) - - t.end() -}); - -[ - [ ['http2', 'dont-land-on-v6.x'], - ['lib/http2.js', - 'lib/internal/http2/core.js', - 'deps/nghttp2/lib/nghttp2_buf.c'] ], - [ ['c++', 'http2', 'dont-land-on-v6.x'], - ['src/node_http2.cc', - 'src/node_http2.h', - 'src/node_http2_core.h', - 'src/node_http2_core-inl.h'] ], - [ ['build', 'http2', 'dont-land-on-v6.x'], - ['deps/nghttp2/nghttp2.gyp'] ], - [ ['doc', 'http2'], ['doc/api/http2.md'] ] -].forEach((info) => { - const labels = info[0] - const files = info[1] - for (const file of files) { - tap.test(`label: "${labels.join('","')}" when ./${file} has been changed`, (t) => { - const resolved = nodeLabels.resolveLabels([file]) - - t.same(resolved, labels) - - t.end() - }) - } -}) diff --git a/test/unit/node-owners.test.js b/test/unit/node-owners.test.js new file mode 100644 index 00000000..d9d68b73 --- /dev/null +++ b/test/unit/node-owners.test.js @@ -0,0 +1,87 @@ +import test from 'node:test' + +import { Owners } from '../../lib/node-owners.js' +import readFixture from '../read-fixture.js' + +const ownersFile = readFixture('CODEOWNERS') + +test('single file single team match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['file1']), + ['@nodejs/test1'] + ) + done() +}) + +test('double file single team match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['file1', 'file4']), + ['@nodejs/test1'] + ) + done() +}) + +test('double file double individual team match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['file1', 'file2']), + ['@nodejs/test1', '@nodejs/test2'] + ) + done() +}) + +test('single file double team match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['file3']), + ['@nodejs/test1', '@nodejs/test2'] + ) + done() +}) + +test('double file triple team match (1 + 2)', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['file5', 'file3']), + ['@nodejs/test1', '@nodejs/test2', '@nodejs/test3'] + ) + done() +}) + +test('folder match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['folder1/file5']), + ['@nodejs/test3'] + ) + done() +}) + +test('extension match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['folder2/file1.js']), + ['@nodejs/test4', '@nodejs/test5'] + ) + done() +}) + +test('no match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['unknown']), + [] + ) + done() +}) + +test('no match + single match', (t, done) => { + const owners = Owners.fromFile(ownersFile) + t.assert.deepStrictEqual( + owners.getOwnersForPaths(['unknown', 'file1']), + ['@nodejs/test1'] + ) + done() +}) diff --git a/test/unit/node-repo-owners.test.js b/test/unit/node-repo-owners.test.js new file mode 100644 index 00000000..c62f2c08 --- /dev/null +++ b/test/unit/node-repo-owners.test.js @@ -0,0 +1,265 @@ +import test from 'node:test' +import fetchMock from 'fetch-mock' +import nock from 'nock' + +import { _testExports, resolveOwnersThenPingPr } from '../../lib/node-repo.js' +import readFixture from '../read-fixture.js' + +const { + getCodeOwnersUrl, + listFiles, + getDefaultBranch, + getCodeOwnersFile, + pingOwners, + getCommentForOwners +} = _testExports + +fetchMock.mockGlobal() + +test('getCodeOwnersUrl', (t, done) => { + const owner = 'nodejs' + const repo = 'node-auto-test' + const defaultBranch = 'main' + + t.assert.strictEqual( + getCodeOwnersUrl(owner, repo, defaultBranch), + `https://raw.githubusercontent.com/${owner}/${repo}/${defaultBranch}/.github/CODEOWNERS` + ) + done() +}) + +test('listFiles success', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test', + prId: 12345, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const fixture = readFixture('pull-request-files.json') + const urlPattern = `https://api.github.com/repos/${options.owner}/${options.repo}/pulls/${options.prId}/files` + fetchMock.route(urlPattern, fixture) + + const files = await listFiles(options) + t.assert.deepStrictEqual(files, fixture.map(({ filename }) => filename)) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) +}) + +test('listFiles fail', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test', + prId: 12346, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const urlPattern = `https://api.github.com/repos/${options.owner}/${options.repo}/pulls/${options.prId}/files` + fetchMock.route(urlPattern, 500) + + await t.assert.rejects(listFiles(options)) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) +}) + +test('getDefaultBranch success', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-2', + prId: 12347, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const fixture = readFixture('get-repository.json') + const urlPattern = `https://api.github.com/repos/${options.owner}/${options.repo}` + fetchMock.route(urlPattern, fixture) + + const defaultBranch = await getDefaultBranch(options) + t.assert.deepStrictEqual(defaultBranch, fixture.default_branch) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) +}) + +test('getDefaultBranch empty response', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-3', + prId: 12347, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const urlPattern = `https://api.github.com/repos/${options.owner}/${options.repo}` + + fetchMock.route(urlPattern, 200) + + await t.assert.rejects(getDefaultBranch(options)) + t.assert.strictEqual(fetchMock.callHistory.called(), true) +}) + +test('getDefaultBranch fail', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-4', + prId: 12347, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const urlPattern = `https://api.github.com/repos/${options.owner}/${options.repo}` + fetchMock.route(urlPattern, 500) + + await t.assert.rejects(getDefaultBranch(options)) + t.assert.strictEqual(fetchMock.callHistory.called(), true) +}) + +test('getCodeOwnersFile success', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-5', + prId: 12347, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const fixture = readFixture('CODEOWNERS') + const base = 'https://localhost' + const filePath = '/CODEOWNERS' + const url = `${base}${filePath}` + const scope = nock(base) + .get(filePath) + .reply(200, fixture) + + const file = await getCodeOwnersFile(url, options) + t.assert.deepStrictEqual(file, fixture) + scope.done() +}) + +test('getCodeOwnersFile fail', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-6', + prId: 12347, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const base = 'https://localhost' + const filePath = '/CODEOWNERS' + const url = `${base}${filePath}` + const scope = nock(base) + .get(filePath) + .reply(500) + + await t.assert.rejects(getCodeOwnersFile(url, options)) + scope.done() +}) + +test('pingOwners success', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-6', + prId: 12348, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const fixture = readFixture('pull-request-create-comment.json') + const owners = ['@owner1', '@owner2'] + const body = { body: getCommentForOwners(owners) } + const url = `https://api.github.com/repos/${options.owner}/${options.repo}/issues/${options.prId}/comments` + + fetchMock.route( + { + body, + method: 'POST', + url + }, + { + status: 201, + body: fixture + } + ) + + await pingOwners(options, owners) + fetchMock.callHistory.called(url) +}) + +test('pingOwners fail', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test-6', + prId: 12349, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const url = `https://api.github.com/repos/${options.owner}/${options.repo}/issues/${options.prId}/comments` + fetchMock.route({ url, method: 'POST' }, 500) + + await t.assert.rejects(pingOwners(options, [])) + fetchMock.callHistory.called(url) +}) + +test('resolveOwnersThenPingPr success', async (t) => { + const options = { + owner: 'nodejs', + repo: 'node-auto-test', + prId: 99999, + logger: { info: () => {}, error: () => {}, debug: () => {}, child: function () { return this } }, + retries: 1, + defaultBranch: 'main', + retryInterval: 10 + } + + const owners = ['@nodejs/team', '@nodejs/team2'] + + fetchMock.route( + `https://api.github.com/repos/${options.owner}/${options.repo}/pulls/${options.prId}/files`, + readFixture('pull-request-files.json') + ) + + fetchMock.route( + `https://api.github.com/repos/${options.owner}/${options.repo}`, + readFixture('get-repository.json') + ) + + const scope = nock('https://raw.githubusercontent.com') + .get(`/${options.owner}/${options.repo}/master/.github/CODEOWNERS`) + .reply(200, readFixture('CODEOWNERS')) + + fetchMock.route( + { + body: { body: getCommentForOwners(owners) }, + method: 'POST', + url: `https://api.github.com/repos/${options.owner}/${options.repo}/issues/${options.prId}/comments` + }, + { + status: 201, + body: readFixture('pull-request-create-comment.json') + } + ) + + await resolveOwnersThenPingPr(options, owners) + + t.assert.strictEqual(fetchMock.callHistory.called(), true) + scope.done() +}) diff --git a/test/unit/node-repo.test.js b/test/unit/node-repo.test.js index 0abc4a9f..53128e30 100644 --- a/test/unit/node-repo.test.js +++ b/test/unit/node-repo.test.js @@ -1,124 +1,66 @@ -'use strict' +import test from 'node:test' +import fetchMock from 'fetch-mock' -const lolex = require('lolex') -const proxyquire = require('proxyquire') -const sinon = require('sinon') -const tap = require('tap') +import * as nodeRepo from '../../lib/node-repo.js' -const logger = require('../../lib/logger') -const githubClient = require('../../lib/github-client') -const readFixture = require('../read-fixture') +import logger from '../../lib/logger.js' +import readFixture from '../read-fixture.js' -tap.test('fetchExistingLabels(): caches existing repository labels', (t) => { - sinon.stub(githubClient.issues, 'getLabels').yields(null, []) - sinon.stub(githubClient, 'hasNextPage', () => false) - const nodeRepo = proxyquire('../../lib/node-repo', { - './github-client': githubClient - }) - - t.plan(1) - t.tearDown(() => { - githubClient.issues.getLabels.restore() - githubClient.hasNextPage.restore() - }) - - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, () => { - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, () => { - t.ok(githubClient.issues.getLabels.calledOnce) - }) - }) -}) - -tap.test('fetchExistingLabels(): cache expires after one hour', (t) => { - const clock = lolex.install() - sinon.stub(githubClient.issues, 'getLabels').yields(null, []) - sinon.stub(githubClient, 'hasNextPage', () => false) - const nodeRepo = proxyquire('../../lib/node-repo', { - './github-client': githubClient - }) +fetchMock.mockGlobal() - t.plan(1) - t.tearDown(() => { - githubClient.issues.getLabels.restore() - githubClient.hasNextPage.restore() - clock.uninstall() - }) - - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, () => { - // fetch labels again after 1 hour and 1 minute - clock.tick(1000 * 60 * 61) - - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, () => { - t.equal(githubClient.issues.getLabels.callCount, 2) - }) - }) -}) +test('getBotPrLabels(): returns labels added by nodejs-github-bot', (t, done) => { + const events = readFixture('pull-request-events.json') -tap.test('fetchExistingLabels(): yields an array of existing label names', (t) => { - const labelsFixture = readFixture('repo-labels.json') - sinon.stub(githubClient.issues, 'getLabels').yields(null, labelsFixture) - sinon.stub(githubClient, 'hasNextPage', () => false) - const nodeRepo = proxyquire('../../lib/node-repo', { - './github-client': githubClient - }) + const owner = 'nodejs' + const repo = 'node5' + const prId = '1' + const urlPattern = `glob:https://api.github.com/repos/${owner}/${repo}/issues/${prId}/events?*` + fetchMock.route(urlPattern, events.data) t.plan(2) - t.tearDown(() => { - githubClient.issues.getLabels.restore() - githubClient.hasNextPage.restore() - }) - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, (err, existingLabels) => { - t.equal(err, null) - t.ok(existingLabels.includes('cluster')) + nodeRepo.getBotPrLabels({ owner, repo, prId }, (_, labels) => { + t.assert.deepStrictEqual(labels, ['testlabel']) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) + done() }) }) -tap.test('fetchExistingLabels(): can retrieve more than 100 labels', (t) => { - const labelsFixturePage1 = readFixture('repo-labels.json') - const labelsFixturePage2 = readFixture('repo-labels-page-2.json') - sinon.stub(githubClient.issues, 'getLabels', (options, cb) => cb(null, options.page === 1 ? labelsFixturePage1 : labelsFixturePage2)) - sinon.stub(githubClient, 'hasNextPage', (listing) => listing === labelsFixturePage1) - const nodeRepo = proxyquire('../../lib/node-repo', {'./github-client': githubClient}) - - t.plan(3) - t.tearDown(() => { - githubClient.issues.getLabels.restore() - githubClient.hasNextPage.restore() - }) - nodeRepo._fetchExistingLabels({ owner: 'nodejs', repo: 'node', logger }, (err, existingLabels) => { - t.equal(err, null) - t.ok(existingLabels.includes('cluster')) - t.ok(existingLabels.includes('windows')) - }) -}) +test('getBotPrLabels(): returns net labels added/removed by nodejs-github-bot', (t, done) => { + const events = readFixture('pull-request-events-2.json') -tap.test('getBotPrLabels(): returns labels added by nodejs-github-bot', (t) => { - const events = readFixture('pull-request-events.json') - sinon.stub(githubClient.issues, 'getEvents', (options, cb) => { cb(null, events) }) - const nodeRepo = proxyquire('../../lib/node-repo', {'./github-client': githubClient}) + const owner = 'nodejs' + const repo = 'node6' + const prId = '2' + const urlPattern = `glob:https://api.github.com/repos/${owner}/${repo}/issues/${prId}/events?*` - t.plan(1) - t.tearDown(() => { - githubClient.issues.getEvents.restore() - }) + fetchMock.route( + urlPattern, + events.data + ) + t.plan(2) - nodeRepo.getBotPrLabels({ owner: 'nodejs', repo: 'node', prId: '1' }, (_, labels) => { - t.same(labels, ['testlabel']) + nodeRepo.getBotPrLabels({ owner, repo, prId }, (_, labels) => { + t.assert.deepStrictEqual(labels, []) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) + done() }) }) -tap.test('getBotPrLabels(): returns net labels added/removed by nodejs-github-bot', (t) => { - const events = readFixture('pull-request-events-2.json') - sinon.stub(githubClient.issues, 'getEvents', (options, cb) => { cb(null, events) }) - const nodeRepo = proxyquire('../../lib/node-repo', {'./github-client': githubClient}) - - t.plan(1) - t.tearDown(() => { - githubClient.issues.getEvents.restore() - }) +test('removeLabelFromPR(): should remove label', async (t) => { + const owner = 'nodejs' + const repo = 'node7' + const prId = '3' + const label = '3' + const urlPattern = `https://api.github.com/repos/${owner}/${repo}/issues/${prId}/labels/${label}` + + fetchMock.route( + urlPattern, + 200 + ) + t.plan(2) - nodeRepo.getBotPrLabels({ owner: 'nodejs', repo: 'node', prId: '1' }, (_, labels) => { - t.same(labels, []) - }) + const response = await nodeRepo.removeLabelFromPR({ owner, repo, prId, logger }, label) + t.assert.deepStrictEqual(label, response) + t.assert.strictEqual(fetchMock.callHistory.called(urlPattern), true) }) diff --git a/test/unit/push-jenkins-update.test.js b/test/unit/push-jenkins-update.test.js index ee9ba79a..0ef3f3f8 100644 --- a/test/unit/push-jenkins-update.test.js +++ b/test/unit/push-jenkins-update.test.js @@ -1,27 +1,67 @@ -const tap = require('tap') -const proxyquire = require('proxyquire') -const sinon = require('sinon') +import test from 'node:test' -const githubClient = require('../../lib/github-client') +import { findLatestCommitInPr } from '../../lib/push-jenkins-update.js' -const readFixture = require('../read-fixture') +import fetchMock from 'fetch-mock' +import readFixture from '../read-fixture.js' -tap.test('findLatestCommitInPr: paginates results when more than 100 commits in a PR', (t) => { - const commitsFixturePage1 = readFixture('pull-requests-commits-page-1.json') - const commitsFixturePage104 = readFixture('pull-requests-commits-page-104.json') +test('findLatestCommitInPr: paginates results when more than 100 commits in a PR', async (t) => { + const commitsFixturePage1 = readFixture('pull-request-commits-page-1.json') + const commitsFixturePage2 = readFixture('pull-request-commits-page-2.json') + const commitsFixturePage3 = readFixture('pull-request-commits-page-3.json') + const commitsFixturePage4 = readFixture('pull-request-commits-page-4.json') + const owner = 'nodejs' + const repo = 'node' + const pr = 9745 - sinon.stub(githubClient.pullRequests, 'getCommits', (options, cb) => cb(null, options.page === 1 ? commitsFixturePage1 : commitsFixturePage104)) - sinon.stub(githubClient, 'hasLastPage', (lastResult) => lastResult === commitsFixturePage1 ? 'https://api.github.com/repos/nodejs/node/pulls/9745/commits?page=104' : undefined) - const pushJenkinsUpdate = proxyquire('../../lib/push-jenkins-update', {'./github-client': githubClient}) + fetchMock.mockGlobal() - t.plan(2) + const firstPageScope = fetchMock.route( + `https://api.github.com/repos/${owner}/${repo}/pulls/${pr}/commits`, + { + body: commitsFixturePage1, + headers: { + link: '; rel="next", ; rel="last"' + } + } + ) - pushJenkinsUpdate.findLatestCommitInPr({ - owner: 'nodejs', - repo: 'node', - number: 9745 - }, (err, commit) => { - t.equal(err, null) - t.equal(commit.sha, 'c1aa949064892dbe693750686c06f4ad5673e577') - }) + const secondPageScope = fetchMock.route( + `https://api.github.com/repositories/27193779/pulls/${pr}/commits?page=2`, + { + body: commitsFixturePage2, + headers: { + link: '; rel="prev", ; rel="next", ; rel="last", ; rel="first"' + } + } + ) + + const thirdPageScope = fetchMock.route( + `https://api.github.com/repositories/27193779/pulls/${pr}/commits?page=3`, + { + body: commitsFixturePage3, + headers: { + link: '; rel="prev", ; rel="next", ; rel="last", ; rel="first"' + } + } + ) + + const fourthPageScope = fetchMock.route( + `https://api.github.com/repositories/27193779/pulls/${pr}/commits?page=4`, + { + body: commitsFixturePage4, + headers: { + link: '; rel="prev", ; rel="first"' + } + } + ) + + t.plan(1) + + const commit = await findLatestCommitInPr({ owner, repo, pr }) + t.assert.strictEqual(commit.sha, 'c1aa949064892dbe693750686c06f4ad5673e577') + firstPageScope.callHistory.called() + secondPageScope.callHistory.called() + thirdPageScope.callHistory.called() + fourthPageScope.callHistory.called() })