From 41d5ba269a592ed4a812153767afe23e8a0f7796 Mon Sep 17 00:00:00 2001 From: "Maniar, Samarth (ETW - FLEX)" Date: Thu, 9 Jul 2020 12:17:11 -0700 Subject: [PATCH 1/3] Added Koa middleware support --- lerna.json | 2 +- package.json | 3 + packages/measured-node-metrics/lib/index.js | 14 +- .../lib/nodeHttpRequestMetrics.js | 24 +- .../integration/test-express-middleware.js | 22 +- .../test/integration/test-koa-middleware.js | 124 +++++++ .../test/unit/test-nodeHttpRequestMetrics.js | 31 +- .../SignalFx Koa Full End to End Example.md | 91 +++++ yarn.lock | 319 +++++++++++++++++- 9 files changed, 601 insertions(+), 29 deletions(-) create mode 100644 packages/measured-node-metrics/test/integration/test-koa-middleware.js create mode 100644 tutorials/SignalFx Koa Full End to End Example.md diff --git a/lerna.json b/lerna.json index c996382..156800c 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ "packages": [ "packages/*" ], - "version": "1.51.1" + "version": "1.51.2" } diff --git a/package.json b/package.json index dfcc268..69f8241 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,9 @@ "gh-pages": "^1.1.0", "ink-docstrap": "^1.3.2", "jsdoc": "^3.5.5", + "koa": "^2.13.0", + "koa-bodyparser": "^4.3.0", + "koa-router": "^9.1.0", "lerna": "^2.11.0", "mocha": "^5.1.1", "mocha-lcov-reporter": "^1.3.0", diff --git a/packages/measured-node-metrics/lib/index.js b/packages/measured-node-metrics/lib/index.js index f85a226..b93d82e 100644 --- a/packages/measured-node-metrics/lib/index.js +++ b/packages/measured-node-metrics/lib/index.js @@ -1,6 +1,6 @@ const { nodeProcessMetrics, createProcessMetrics } = require('./nodeProcessMetrics'); const { nodeOsMetrics, createOSMetrics } = require('./nodeOsMetrics'); -const { createExpressMiddleware, onRequestStart, onRequestEnd } = require('./nodeHttpRequestMetrics'); +const { createExpressMiddleware, createKoaMiddleware, onRequestStart, onRequestEnd } = require('./nodeHttpRequestMetrics'); /** * The main module for the measured-node-metrics lib. @@ -69,6 +69,18 @@ module.exports = { */ createExpressMiddleware, + /** + * Creates a Koa middleware that reports a timer on request data. + * With this middleware you will get requests counts and latency percentiles all filterable by status codes, http method, and uri paths. + * + * @function + * @name createExpressMiddleware + * @param {SelfReportingMetricsRegistry} metricsRegistry + * @param {number} [reportingIntervalInSeconds] + * @return {Function} + */ + createKoaMiddleware, + /** * At the start of the request, create a stopwatch, that starts tracking how long the request is taking. * @function diff --git a/packages/measured-node-metrics/lib/nodeHttpRequestMetrics.js b/packages/measured-node-metrics/lib/nodeHttpRequestMetrics.js index dae7c20..c5b5a0e 100644 --- a/packages/measured-node-metrics/lib/nodeHttpRequestMetrics.js +++ b/packages/measured-node-metrics/lib/nodeHttpRequestMetrics.js @@ -7,7 +7,7 @@ const { Stopwatch } = require('measured-core'); const DEFAULT_REQUEST_METRICS_REPORTING_INTERVAL_IN_SECONDS = 10; /** - * This module has functions needed to create middlewares for frameworks such as express. + * This module has functions needed to create middlewares for frameworks such as express and koa. * It also exports the 2 functions needed to implement your own middleware. * If you implement a middleware for a framework not implemented here, please contribute it back. * @@ -37,6 +37,28 @@ module.exports = { }; }, + /** + * Creates a Koa middleware that reports a timer on request data. + * With this middleware you will get requests counts and latency percentiles all filterable by status codes, http method, and uri paths. + * + * @param {SelfReportingMetricsRegistry} metricsRegistry + * @param {number} [reportingIntervalInSeconds] + * @return {Function} + */ + createKoaMiddleware: (metricsRegistry, reportingIntervalInSeconds) => async (ctx, next) => { + const stopwatch = module.exports.onRequestStart(); + const { req, res } = ctx; + + res.once('finish', () => { + const { method } = req; + const { statusCode } = res; + const uri = ctx._matchedRoute || '_unknown'; + module.exports.onRequestEnd(metricsRegistry, stopwatch, method, statusCode, uri, reportingIntervalInSeconds); + }); + + await next(); + }, + /** * At the start of the request, create a stopwatch, that starts tracking how long the request is taking. * @return {Stopwatch} diff --git a/packages/measured-node-metrics/test/integration/test-express-middleware.js b/packages/measured-node-metrics/test/integration/test-express-middleware.js index f279531..76a44c9 100644 --- a/packages/measured-node-metrics/test/integration/test-express-middleware.js +++ b/packages/measured-node-metrics/test/integration/test-express-middleware.js @@ -50,22 +50,20 @@ describe('express-middleware', () => { assert(registeredKeys.length === 1); assert.equal(registeredKeys[0], 'requests-GET-200-/hello'); const metricWrapper = registry._registry.getMetricWrapperByKey('requests-GET-200-/hello'); - const name = metricWrapper.name; - const dimensions = metricWrapper.dimensions; + const { name, dimensions } = metricWrapper; assert.equal(name, 'requests'); assert.deepEqual(dimensions, { statusCode: '200', method: 'GET', uri: '/hello' }); }); }); it('creates a single timer that has 1 count for requests, when an http POST call is made once', () => { - const options = {method: 'POST', headers: {'Content-Type': 'application/json'}}; + const options = { method: 'POST', headers: { 'Content-Type': 'application/json' } }; return callLocalHost(port, 'world', options).then(() => { const registeredKeys = registry._registry.allKeys(); assert(registeredKeys.length === 1); assert.equal(registeredKeys[0], 'requests-POST-201-/world'); const metricWrapper = registry._registry.getMetricWrapperByKey('requests-POST-201-/world'); - const name = metricWrapper.name; - const dimensions = metricWrapper.dimensions; + const { name, dimensions } = metricWrapper; assert.equal(name, 'requests'); assert.deepEqual(dimensions, { statusCode: '201', method: 'POST', uri: '/world' }); }); @@ -84,12 +82,12 @@ describe('express-middleware', () => { const callLocalHost = (port, endpoint, options) => { return new Promise((resolve, reject) => { - const req = Object.assign({protocol: `http:`, - host: `127.0.0.1`, - port: `${port}`, - path: `/${endpoint}`, - method: 'GET'}, - options || {}); + const req = Object.assign({ protocol: 'http:', + host: '127.0.0.1', + port: `${port}`, + path: `/${endpoint}`, + method: 'GET' }, + options || {}); http .request(req, resp => { let data = ''; @@ -106,6 +104,6 @@ const callLocalHost = (port, endpoint, options) => { console.log('Error: ', JSON.stringify(err)); reject(); }) - .end(); + .end(); }); }; diff --git a/packages/measured-node-metrics/test/integration/test-koa-middleware.js b/packages/measured-node-metrics/test/integration/test-koa-middleware.js new file mode 100644 index 0000000..06f8152 --- /dev/null +++ b/packages/measured-node-metrics/test/integration/test-koa-middleware.js @@ -0,0 +1,124 @@ +const Koa = require('koa'); +const KoaBodyParser = require('koa-bodyparser'); +const Router = require('koa-router'); +const Registry = require('measured-reporting').SelfReportingMetricsRegistry; +const TestReporter = require('../unit/TestReporter'); +const { createKoaMiddleware } = require('../../lib'); +const findFreePort = require('find-free-port'); +const assert = require('assert'); +const http = require('http'); + +describe('koa-middleware', () => { + let port; + let reporter; + let registry; + let middleware; + let app; + let httpServer; + let router; + beforeEach(() => { + return new Promise(resolve => { + reporter = new TestReporter(); + registry = new Registry(reporter); + middleware = createKoaMiddleware(registry, 1); + app = new Koa(); + router = new Router(); + + router.get('/hello', ({ response }) => { + response.body = 'Hello World!'; + return response; + }); + router.post('/world', ({ response }) => { + response.body = 'Hello World!'; + response.status = 201; + return response; + }); + router.get('/users/:userId', ({ params, response }) => { + response.body = `id: ${params.userId}`; + return response; + }); + + app.use(middleware); + app.use(KoaBodyParser()); + app.use(router.routes()); + app.use(router.allowedMethods()); + + app.on('error', (err) => console.error(err)); + + findFreePort(3000).then(portArr => { + port = portArr.shift(); + + httpServer = app.listen(port); + resolve(); + }); + }); + }); + + afterEach(() => { + httpServer.close(); + registry.shutdown(); + }); + + it('creates a single timer that has 1 count for requests, when an http call is made once', () => { + return callLocalHost(port, 'hello').then(() => { + const registeredKeys = registry._registry.allKeys(); + assert(registeredKeys.length === 1); + assert.equal(registeredKeys[0], 'requests-GET-200-/hello'); + const metricWrapper = registry._registry.getMetricWrapperByKey('requests-GET-200-/hello'); + const { name, dimensions } = metricWrapper; + assert.equal(name, 'requests'); + assert.deepEqual(dimensions, { statusCode: '200', method: 'GET', uri: '/hello' }); + }); + }); + + it('creates a single timer that has 1 count for requests, when an http POST call is made once', () => { + const options = { method: 'POST', headers: { 'Content-Type': 'application/json' } }; + return callLocalHost(port, 'world', options).then(() => { + const registeredKeys = registry._registry.allKeys(); + assert(registeredKeys.length === 1); + assert.equal(registeredKeys[0], 'requests-POST-201-/world'); + const metricWrapper = registry._registry.getMetricWrapperByKey('requests-POST-201-/world'); + const { name, dimensions } = metricWrapper; + assert.equal(name, 'requests'); + assert.deepEqual(dimensions, { statusCode: '201', method: 'POST', uri: '/world' }); + }); + }); + + it('does not create runaway n metrics in the registry for n ids in the path', () => { + return Promise.all([ + callLocalHost(port, 'users/foo'), + callLocalHost(port, 'users/bar'), + callLocalHost(port, 'users/bop') + ]).then(() => { + assert.equal(registry._registry.allKeys().length, 1, 'There should only be one metric for /users and GET'); + }); + }); +}); + +const callLocalHost = (port, endpoint, options) => { + return new Promise((resolve, reject) => { + const req = Object.assign({ protocol: 'http:', + host: '127.0.0.1', + port: `${port}`, + path: `/${endpoint}`, + method: 'GET' }, + options || {}); + http + .request(req, resp => { + let data = ''; + resp.on('data', chunk => { + data += chunk; + }); + + resp.on('end', () => { + console.log(JSON.stringify(data)); + resolve(); + }); + }) + .on('error', err => { + console.log('Error: ', JSON.stringify(err)); + reject(); + }) + .end(); + }); +}; diff --git a/packages/measured-node-metrics/test/unit/test-nodeHttpRequestMetrics.js b/packages/measured-node-metrics/test/unit/test-nodeHttpRequestMetrics.js index d82db95..238d256 100644 --- a/packages/measured-node-metrics/test/unit/test-nodeHttpRequestMetrics.js +++ b/packages/measured-node-metrics/test/unit/test-nodeHttpRequestMetrics.js @@ -2,7 +2,7 @@ const assert = require('assert'); const EventEmitter = require('events'); const { Stopwatch } = require('measured-core'); -const { createExpressMiddleware, onRequestStart, onRequestEnd } = require('../../lib'); +const { createExpressMiddleware, createKoaMiddleware, onRequestStart, onRequestEnd } = require('../../lib'); const TestReporter = require('./TestReporter'); const Registry = require('measured-reporting').SelfReportingMetricsRegistry; @@ -55,7 +55,7 @@ describe('createExpressMiddleware', () => { middleware( { method: 'GET', - routine: {path: '/v1/rest/some-end-point'} + routine: { path: '/v1/rest/some-end-point' } }, res, () => {} @@ -68,3 +68,30 @@ describe('createExpressMiddleware', () => { registry.shutdown(); }); }); + +describe('createKoaMiddleware', () => { + it('creates and registers a metric called request that is a timer', async () => { + const reporter = new TestReporter(); + const registry = new Registry(reporter); + + const middleware = createKoaMiddleware(registry); + + const res = new MockResponse(); + middleware( + { + req: { + method: 'GET', + url: '/v1/rest/some-end-point', + }, + res, + }, + () => Promise.resolve() + ).then(() => { + const registeredKeys = registry._registry.allKeys(); + assert(registeredKeys.length === 1); + assert(registeredKeys[0].includes('requests-GET')); + registry.shutdown(); + }); + res.finish(); + }); +}); diff --git a/tutorials/SignalFx Koa Full End to End Example.md b/tutorials/SignalFx Koa Full End to End Example.md new file mode 100644 index 0000000..4225a6f --- /dev/null +++ b/tutorials/SignalFx Koa Full End to End Example.md @@ -0,0 +1,91 @@ +### Using Measured to instrument OS, Process and Koa Metrics. + +This tutorial shows how to use the measured libraries to fully instrument OS and Node Process metrics as well as create a Koa middleware. + +The middleware will measure request count, latency distributions (req/res time histogram) and add dimensions to make it filterable by request method, response status code, request uri path. + +**NOTE:** You must add `app.use(createKoaMiddleware(...))` **before** the use of any Koa bodyParsers like `app.use(KoaBodyParser())` because requests that are first handled by a bodyParser will not get measured. + +```javascript +const os = require('os'); +const signalfx = require('signalfx'); +const Koa = require('koa'); +const KoaBodyParser = require('koa-bodyparser'); +const Router = require('koa-router'); +const { SignalFxMetricsReporter, SignalFxSelfReportingMetricsRegistry } = require('measured-signalfx-reporter'); +const { createProcessMetrics, createOSMetrics, createKoaMiddleware } = require('measured-node-metrics'); +const libraryMetadata = require('./package'); // get metadata from package.json + +const library = libraryMetadata.name; +const version = libraryMetadata.version; + +// Report process and os stats 1x per minute +const PROCESS_AND_SYSTEM_METRICS_REPORTING_INTERVAL_IN_SECONDS = 60; +// Report the request count and histogram stats every 10 seconds +const REQUEST_METRICS_REPORTING_INTERVAL_IN_SECONDS = 10; + +const defaultDimensions = { + app: library, + app_version: version, + env: 'test' +}; + +/** + * Get your api key from a secrets provider of some kind. + * + * Good examples: + * + *
  • S3 with KMS + *
  • Cerberus + *
  • AWS Secrets Manager + *
  • Vault + *
  • Confidant + * + * Bad examples: + * + *
  • Checked into SCM in plaintext as a property + *
  • Set as a plaintext environment variable + * + * @return {string} Returns the resolved Signal Fx Api Key + */ +const apiKeyResolver = () => { + // https://diogomonica.com/2017/03/27/why-you-shouldnt-use-env-variables-for-secret-data/ + return process.env.SIGNALFX_API_KEY; +}; + +// Create the signal fx client +const signalFxClient = new signalfx.Ingest(apiKeyResolver(), { + userAgents: library +}); + +// Create the signal fx reporter with the client +const signalFxReporter = new SignalFxMetricsReporter(signalFxClient, { + defaultDimensions: defaultDimensions, + defaultReportingIntervalInSeconds: 10, + logLevel: 'debug' +}); + +// Create the self reporting metrics registry with the signal fx reporter +const metricsRegistry = new SignalFxSelfReportingMetricsRegistry(signalFxReporter, { logLevel: 'debug' }); + +createOSMetrics(metricsRegistry, {}, PROCESS_AND_SYSTEM_METRICS_REPORTING_INTERVAL_IN_SECONDS); +createProcessMetrics(metricsRegistry, {}, PROCESS_AND_SYSTEM_METRICS_REPORTING_INTERVAL_IN_SECONDS); + +const app = new Koa(); +router = new Router(); + +router.get('/hello', (req, res) => { + res.send('hello world'); +}); + +router.get('/path2', (req, res) => { + res.send('path2'); +}); + +// wire up the metrics middleware +app.use(createKoaMiddleware(metricsRegistry, REQUEST_METRICS_REPORTING_INTERVAL_IN_SECONDS)); +app.use(KoaBodyParser()); +app.use(router.routes()); + +app.listen(8080, () => log.info('Example app listening on port 8080!')); +``` diff --git a/yarn.lock b/yarn.lock index ca27d2c..91221cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,14 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" +accepts@^1.3.5: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -104,6 +112,11 @@ ansi_up@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-1.3.0.tgz#c9c946bfc0b9bb5eaa060684bf2abaafe68bbd44" +any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -728,6 +741,11 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -742,6 +760,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + cached-path-relative@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" @@ -903,6 +929,16 @@ cmd-shim@^2.0.2: graceful-fs "^4.1.2" mkdirp "~0.5.0" +co-body@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.0.0.tgz#965b9337d7f5655480787471f4237664820827e3" + integrity sha512-9ZIcixguuuKIptnY8yemEOuhb71L/lLf+Rl5JfJEUiDNJk0e02MBt7BPxR2GEh5mw8dPthQYR4jPI/BnS1MQgw== + dependencies: + inflation "^2.0.0" + qs "^6.5.2" + raw-body "^2.3.3" + type-is "^1.6.16" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1056,9 +1092,17 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -content-type@~1.0.4: +content-disposition@~0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@^1.0.4, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^1.6.6: version "1.6.6" @@ -1226,10 +1270,23 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +cookies@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" + integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== + dependencies: + depd "~2.0.0" + keygrip "~1.1.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -1380,12 +1437,19 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@3.1.0, debug@^3.1.0: +debug@3.1.0, debug@^3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" +debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -1405,6 +1469,11 @@ dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + deep-extend@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" @@ -1479,9 +1548,15 @@ depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" -depd@~1.1.1, depd@~1.1.2: +depd@^1.1.2, depd@~1.1.1, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deps-sort@^2.0.0: version "2.0.0" @@ -1499,9 +1574,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.0.4: +destroy@^1.0.4, destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-indent@^4.0.0: version "4.0.0" @@ -1636,9 +1712,10 @@ emoji-regex@^6.1.0: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" -encodeurl@~1.0.2: +encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" @@ -1684,9 +1761,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: version "1.0.5" @@ -2191,9 +2269,10 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@0.5.2: +fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs-extra@^4.0.1, fs-extra@^4.0.2: version "4.0.3" @@ -2552,6 +2631,14 @@ htmlparser2@^3.9.0: inherits "^2.0.1" readable-stream "^2.0.2" +http-assert@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" + integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw== + dependencies: + deep-equal "~1.0.1" + http-errors "~1.7.2" + http-errors@1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -2561,6 +2648,28 @@ http-errors@1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" +http-errors@1.7.3, http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@^1.6.3, http-errors@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -2593,6 +2702,13 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" @@ -2631,6 +2747,11 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" +inflation@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" + integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2646,6 +2767,11 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@^1.3.2, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -2828,6 +2954,11 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -3141,6 +3272,13 @@ just-extend@^1.1.27: version "1.1.27" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" +keygrip@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" + integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== + dependencies: + tsscmp "1.0.6" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -3167,6 +3305,74 @@ klaw@~2.0.0: dependencies: graceful-fs "^4.1.9" +koa-bodyparser@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" + integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== + dependencies: + co-body "^6.0.0" + copy-to "^2.0.1" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-router@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-9.1.0.tgz#47d1ce2109fd62b1d76eb42df90b635ff93b6831" + integrity sha512-5xakU0Ip2oFXPaA5882NTLopb5iaNfipBmTU5AoGbgDHOsHqRQDnaMnazj8DmDCt2rSxNB2TBBVLO9OiM0TvdA== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + koa-compose "^4.1.0" + methods "^1.1.2" + path-to-regexp "^6.1.0" + +koa@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.0.tgz#25217e05efd3358a7e5ddec00f0a380c9b71b501" + integrity sha512-i/XJVOfPw7npbMv67+bOeXr3gPqOAw6uh5wFyNs3QvJ47tUx3M3V9rIE0//WytY42MKz4l/MXKyGkQ2LQTfLUQ== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.8.0" + debug "~3.1.0" + delegates "^1.0.0" + depd "^1.1.2" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^1.2.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + labeled-stream-splicer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" @@ -3473,9 +3679,10 @@ merge-source-map@^1.1.0: dependencies: source-map "^0.6.1" -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= micromatch@^2.1.5: version "2.3.11" @@ -3520,6 +3727,11 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -3530,6 +3742,13 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: dependencies: mime-db "~1.33.0" +mime-types@^2.1.18, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -3740,6 +3959,11 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -3781,6 +4005,11 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -3941,9 +4170,10 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -on-finished@~2.3.0: +on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" @@ -3959,6 +4189,11 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -4104,6 +4339,11 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parseurl@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -4160,6 +4400,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.1.0.tgz#0b18f88b7a0ce0bfae6a25990c909ab86f512427" + integrity sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw== + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -4351,6 +4596,11 @@ qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@^6.5.2: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + qs@~6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -4401,6 +4651,16 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" +raw-body@^2.3.3: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: version "1.2.7" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" @@ -4712,7 +4972,7 @@ safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -4824,6 +5084,16 @@ setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -5081,9 +5351,10 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= statuses@~1.4.0: version "1.4.0" @@ -5370,6 +5641,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" @@ -5392,6 +5668,11 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +tsscmp@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" + integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== + tty-browserify@0.0.1, tty-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" @@ -5416,6 +5697,14 @@ type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" +type-is@^1.6.16: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -5545,9 +5834,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vary@~1.1.2: +vary@^1.1.2, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" @@ -5814,3 +6104,8 @@ yauzl@2.4.1: resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" dependencies: fd-slicer "~1.0.1" + +ylru@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" + integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== From 634f6b4cf8832af8794bd4a9c6f2496f5732d2fc Mon Sep 17 00:00:00 2001 From: "Maniar, Samarth (ETW - FLEX)" Date: Thu, 9 Jul 2020 12:26:00 -0700 Subject: [PATCH 2/3] Removed node v6 check from travis.yml and updated a major version bump because of Koa incompatibility of < node v8 --- .travis.yml | 1 - lerna.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3e07322..f6d6bea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ node_js: - 11 - 10 - 8 -- 6 before_install: - sudo apt-get -qq update - sudo apt-get install -y gawk jq diff --git a/lerna.json b/lerna.json index 156800c..46e7191 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ "packages": [ "packages/*" ], - "version": "1.51.2" + "version": "2.0.0" } From 00f019eb404813bee1ea6055ff68b3ca732ef0e6 Mon Sep 17 00:00:00 2001 From: "Maniar, Samarth (ETW - FLEX)" Date: Thu, 9 Jul 2020 14:40:22 -0700 Subject: [PATCH 3/3] Reverted learna version tag --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 46e7191..c996382 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ "packages": [ "packages/*" ], - "version": "2.0.0" + "version": "1.51.1" }