diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/koa-connect | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/koa-connect')
| -rw-r--r-- | node_modules/koa-connect/README.md | 78 | ||||
| -rw-r--r-- | node_modules/koa-connect/examples/auth.js | 13 | ||||
| -rw-r--r-- | node_modules/koa-connect/examples/directory.js | 15 | ||||
| -rw-r--r-- | node_modules/koa-connect/examples/logger.js | 12 | ||||
| -rw-r--r-- | node_modules/koa-connect/examples/session.js | 15 | ||||
| -rw-r--r-- | node_modules/koa-connect/examples/simple.js | 16 | ||||
| -rw-r--r-- | node_modules/koa-connect/index.js | 38 | ||||
| -rw-r--r-- | node_modules/koa-connect/package.json | 27 | ||||
| -rw-r--r-- | node_modules/koa-connect/test/index.js | 114 | ||||
| -rw-r--r-- | node_modules/koa-connect/tests.js | 121 | ||||
| -rw-r--r-- | node_modules/koa-connect/yarn.lock | 408 |
11 files changed, 857 insertions, 0 deletions
diff --git a/node_modules/koa-connect/README.md b/node_modules/koa-connect/README.md new file mode 100644 index 00000000..11567010 --- /dev/null +++ b/node_modules/koa-connect/README.md @@ -0,0 +1,78 @@ +# koa-connect [![npm package badge][npm badge]][npm] + +[npm badge]: https://badge.fury.io/js/koa-connect.svg +[npm]: https://www.npmjs.com/package/koa-connect + +Use [Express](https://github.com/strongloop/express)/[Connect](https://github.com/senchalabs/connect) middleware with [Koa](https://github.com/koajs/koa). + +## Warning + +It is **highly** recommended to use a Koa-specific middleware instead of trying to convert an Express version when they're available. There is a non-trivial difference in the Koa and Express designs and you will inevitably run into some issues. This module is a workaround for the specific cases where the differences can be ignored. Additionally, it also enables library authors to write 1 version of their HTTP middleware. + +### Always use `next` middleware parameter + +Express middlewares need to declare and invoke the `next` callback appropriately for the koa-connect integration to work correctly. + +### For library authors + +If you're attempting to write a framework-agnostic middleware library, be sure to use only core HTTP methods and not any Express-dependent APIs like `res.send`. + +## Installation + +```sh +npm install koa-connect +``` + +## Usage + +See [`examples/`](./examples) for more practical usage. + +```javascript +const Koa = require('koa') +const c2k = require('koa-connect') + +// A generic Express-style middleware function +function connectMiddlware(req, res, next) { + res.writeHead(200, { 'Content-Type': 'text/plain' }) + res.end('From the Connect middleware') + next() +} + +// A generic Koa middlware, without async/await +function koaMiddlware(ctx, next) { + next() + .then(() => { + // The control flow will bubble back to here, like usual + }) + .catch(err => { + // Error handling from downstream middleware, like usual + }) +} + +// A generic Koa middlware with async/await +async function koaMiddleware(ctx, next) { + try { + await next() + } catch (e) { + // Normal error handling + } + // Normal control flow +} + +const app = new Koa() +app.use(koaMiddlware) +app.use(c2k(connectMiddlware)) +app.use((ctx, next) => { + console.log('It will continue on to here') +}) + +app.listen(3000) +``` + +## Testing + +Tests are in `tests.js` and are made with the [Mocha](https://mochajs.org) framework. You can run them with `npm test` or `npm run test:watch` + +## License + +MIT diff --git a/node_modules/koa-connect/examples/auth.js b/node_modules/koa-connect/examples/auth.js new file mode 100644 index 00000000..0ef15cdd --- /dev/null +++ b/node_modules/koa-connect/examples/auth.js @@ -0,0 +1,13 @@ +const Koa = require('koa') +const connect = require('connect') +const c2k = require('..') + +const app = new Koa() +app.use(c2k(connect.logger('dev'))) +app.use(c2k(connect.basicAuth('username', 'password'))) + +app.use((ctx) => { + ctx.body = 'Hello' +}) + +app.listen(3000) diff --git a/node_modules/koa-connect/examples/directory.js b/node_modules/koa-connect/examples/directory.js new file mode 100644 index 00000000..f404a2d6 --- /dev/null +++ b/node_modules/koa-connect/examples/directory.js @@ -0,0 +1,15 @@ +const Koa = require('koa') +const connect = require('connect') +const c2k = require('..') + +const app = new Koa() +app.use(c2k(connect.logger('dev'))) +app.use(c2k(connect.directory(__dirname))) +app.use(c2k(connect.static(__dirname))) + +app.use((ctx, next) => { + ctx.body = 'koa' + next() +}) + +app.listen(3000) diff --git a/node_modules/koa-connect/examples/logger.js b/node_modules/koa-connect/examples/logger.js new file mode 100644 index 00000000..ff4e2323 --- /dev/null +++ b/node_modules/koa-connect/examples/logger.js @@ -0,0 +1,12 @@ +const Koa = require('koa') +const connect = require('connect') +const c2k = require('..') + +const app = new Koa() +app.use(c2k(connect.logger('dev'))) + +app.use((ctx) => { + ctx.body = 'koa' +}) + +app.listen(3000) diff --git a/node_modules/koa-connect/examples/session.js b/node_modules/koa-connect/examples/session.js new file mode 100644 index 00000000..407b18f9 --- /dev/null +++ b/node_modules/koa-connect/examples/session.js @@ -0,0 +1,15 @@ +const Koa = require('koa') +const connect = require('connect') +const c2k = require('..') + +const app = new Koa() +app.use(c2k(connect.logger('dev'))) +app.use(c2k(connect.cookieParser())) +app.use(c2k(connect.cookieSession({ secret: 'keyboard cat'}))) + +app.use((ctx) { + const name = ctx.req.session.name = ctx.query.name || ctx.req.session.name + ctx.body = name || 'Please, enter your name' +}) + +app.listen(3000) diff --git a/node_modules/koa-connect/examples/simple.js b/node_modules/koa-connect/examples/simple.js new file mode 100644 index 00000000..0762adc8 --- /dev/null +++ b/node_modules/koa-connect/examples/simple.js @@ -0,0 +1,16 @@ +const Koa = require('koa') +const c2k = require('..') + +function middleware (req, res, next) { + console.log('connect') + next() +} + +const app = new Koa() +app.use(c2k(middleware)) + +app.use((ctx) { + ctx.body = 'koa' +}) + +app.listen(3000) diff --git a/node_modules/koa-connect/index.js b/node_modules/koa-connect/index.js new file mode 100644 index 00000000..20139f1e --- /dev/null +++ b/node_modules/koa-connect/index.js @@ -0,0 +1,38 @@ +/** + * If the middleware function does declare receiving the `next` callback + * assume that it's synchronous and invoke `next` ourselves + */ +function noCallbackHandler(ctx, connectMiddleware, next) { + connectMiddleware(ctx.req, ctx.res) + return next() +} + +/** + * The middleware function does include the `next` callback so only resolve + * the Promise when it's called. If it's never called, the middleware stack + * completion will stall + */ +function withCallbackHandler(ctx, connectMiddleware, next) { + return new Promise((resolve, reject) => { + connectMiddleware(ctx.req, ctx.res, err => { + if (err) reject(err) + else resolve(next()) + }) + }) +} + +/** + * Returns a Koa middleware function that varies its async logic based on if the + * given middleware function declares at least 3 parameters, i.e. includes + * the `next` callback function + */ +function koaConnect(connectMiddleware) { + const handler = connectMiddleware.length < 3 + ? noCallbackHandler + : withCallbackHandler + return function koaConnect(ctx, next) { + return handler(ctx, connectMiddleware, next) + } +} + +module.exports = koaConnect diff --git a/node_modules/koa-connect/package.json b/node_modules/koa-connect/package.json new file mode 100644 index 00000000..8a323864 --- /dev/null +++ b/node_modules/koa-connect/package.json @@ -0,0 +1,27 @@ +{ + "name": "koa-connect", + "version": "2.0.1", + "description": "Use Connect/Express middleware in Koa", + "repository": "vkurchatkin/koa-connect", + "main": "index.js", + "author": "Vladimir Kurchatkin <vladimir.kurchatkin@gmail.com>", + "contributors": [ + "Louis DeScioli (https://descioli.design)" + ], + "license": "MIT", + "scripts": { + "test": "mocha tests.js", + "test:watch": "npm run test -- --watch --reporter nyan" + }, + "devDependencies": { + "koa": "^2.0.0", + "mocha": "^2.3.4", + "supertest": "^1.1.0" + }, + "keywords": [ + "koa", + "connect", + "express", + "middleware" + ] +} diff --git a/node_modules/koa-connect/test/index.js b/node_modules/koa-connect/test/index.js new file mode 100644 index 00000000..6a3d6065 --- /dev/null +++ b/node_modules/koa-connect/test/index.js @@ -0,0 +1,114 @@ +'use strict'; + +const Koa = require('koa'); +const supertest = require('supertest'); +const c2k = require('..'); + +describe('koa-connect', () => { + let app; + + beforeEach(() => { + app = new Koa(); + app.use( function * (next) { + this.status = 404; + this.body = 'Original'; + yield next; + }) + }); + + it('works with a single noop Connect middleware', (done) => { + app.use(c2k((req, res, next) => { + next() + })); + supertest(app.callback()) + .get('/') + .expect('Original') + .end(done); + }); + + it('works with two noop Connect middleware', (done) => { + app.use(c2k((req, res, next) => next())); + app.use(c2k((req, res, next) => next())); + supertest(app.callback()) + .get('/') + .expect('Original') + .end(done); + }); + + it('passes correctly to downstream Koa middlewares', (done) => { + app.use(c2k((req, res, next) => next())); + app.use(function * () { this.status = 200; }); + supertest(app.callback()) + .get('/') + .expect(200) + .end(done); + }); + + it('bubbles back to earlier middleware', (done) => { + app.use(function * (next) { + yield next; + // Ensures that the following middleware is reached + if ( this.status !== 200 ) { + done(new Error('Never reached connect middleware')) + } + this.status = 201; + }); + + app.use(c2k((req, res) => res.statusCode = 200 )); + + supertest(app.callback()) + .get('/') + .expect(201) + .end(done); + }); + + it('receives errors from Connect middleware', (done) => { + app.use(function * (next) { + try { + yield next; + } catch (err) { + this.status = 500; + } + }) + + app.use(c2k((req, res, next) => { + next(new Error('How Connect does error handling')); + })); + + app.use(function * () { + // Fail the test if this is reached + done(new Error('Improper error handling')) + }) + + supertest(app.callback()) + .get('/') + .expect(500) + .end(done); + }); + + it('Setting the body or status in Koa middlewares does not do anything if res.end was used in a Connect middleware', (done) => { + const message = 'The message that makes it'; + app.use(function * (next) { + yield next; + if ( this.status !== 200 ) { + done(new Error('Never reached connect middleware')); + } + // These calls won't end up doing anything + // And will cause Koa to log a "Can't set headers after they are sent" error + this.status = 500; + this.body = 'A story already written'; + }); + + app.use(c2k((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Length', message.length) + res.end(message); + })); + + supertest(app.callback()) + .get('/') + .expect(200) + .expect(message) + .end(done); + }); +}) diff --git a/node_modules/koa-connect/tests.js b/node_modules/koa-connect/tests.js new file mode 100644 index 00000000..43cb904d --- /dev/null +++ b/node_modules/koa-connect/tests.js @@ -0,0 +1,121 @@ +'use strict' + +const Koa = require('koa') +const supertest = require('supertest') +const c2k = require('./index') +const assert = require('assert') + +describe('koa-connect', () => { + let app + + beforeEach(() => { + app = new Koa() + app.use((ctx, next) => { + ctx.status = 404 + ctx.body = 'Original' + return next() + }) + }) + + it('works with a single noop Connect middleware', (done) => { + function noop(req, res, next) { next() } + app.use(c2k(noop)) + supertest(app.callback()) + .get('/') + .expect('Original') + .end(done) + }) + + it('works with two noop Connect middleware', (done) => { + function noop(req, res, next) { next() } + app.use(c2k(noop)) + app.use(c2k(noop)) + supertest(app.callback()) + .get('/') + .expect('Original') + .end(done) + }) + + it('passes correctly to downstream Koa middlewares', (done) => { + function noop(req, res, next) { next() } + function goodStatusSetter(ctx) { ctx.status = 200 } + app.use(c2k(noop)) + app.use(goodStatusSetter) + supertest(app.callback()) + .get('/') + .expect(200) + .end(done) + }) + + it('bubbles back to earlier middleware', (done) => { + let callOne = false + let callTwo = false + app.use((ctx, next) => { + return next() + .then(() => { + callTwo = true + }) + }) + + app.use(c2k((req, res) => { + res.statusCode = 200 + callOne = true + })) + + supertest(app.callback()) + .get('/') + .expect(200) + .then(() => { + assert(callOne === true, 'Second middleware never called') + assert(callTwo === true, 'Never bubbled back to first middleware') + done() + }) + }) + + it('receives errors from Connect middleware', (done) => { + app.use((ctx, next) => { + next().catch((err) => ctx.status = 505) + }) + + app.use(c2k((req, res, next) => { + next(new Error('How Connect does error handling')) + })) + + app.use((ctx) => { + // Fail the test if this is reached + done(new Error('Improper error handling')) + }) + + supertest(app.callback()) + .get('/') + .expect(505) + .end(done) + }) + + it('Setting the body or status in Koa middlewares does not do anything if res.end was used in a Connect middleware', (done) => { + const message = 'The message that makes it' + app.use((ctx, next) => { + next() + .then(() => { + if ( ctx.status !== 200 ) { + done(new Error('Never reached connect middleware')) + } + // These calls won't end up doing anything + ctx.status = 500 + ctx.body = 'A story already written' + }) + }) + + app.use(c2k((req, res) => { + res.statusCode = 200 + res.setHeader('Content-Length', message.length) + res.end(message) + })) + + supertest(app.callback()) + .get('/') + .expect(200) + .expect(message) + .end(done) + }) +}) diff --git a/node_modules/koa-connect/yarn.lock b/node_modules/koa-connect/yarn.lock new file mode 100644 index 00000000..f39207bc --- /dev/null +++ b/node_modules/koa-connect/yarn.lock @@ -0,0 +1,408 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@^1.2.2: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +combined-stream@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" + +commander@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" + +component-emitter@~1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +content-disposition@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookiejar@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe" + +cookies@~0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +debug@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@2: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@^1.1.0, depd@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +error-inject@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +escape-html@~1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" + +extend@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +form-data@1.0.0-rc3: + version "1.0.0-rc3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc3.tgz#d35bc62e7fbc2937ae78f948aaa0d38d90607577" + dependencies: + async "^1.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.3" + +formidable@~1.0.14: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +glob@3.2.11: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +http-assert@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" + +http-errors@^1.2.8, http-errors@~1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +inherits@2, inherits@2.0.3, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +is-generator-function@^1.0.3: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +jade@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" + dependencies: + commander "0.6.1" + mkdirp "0.3.0" + +keygrip@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.5.0.tgz#b0fbe1e195e43b27588a04fd0be0ddaeca2c154c" + dependencies: + accepts "^1.2.2" + content-disposition "~0.5.0" + content-type "^1.0.0" + cookies "~0.7.0" + debug "*" + delegates "^1.0.0" + depd "^1.1.0" + destroy "^1.0.3" + error-inject "~1.0.0" + escape-html "~1.0.1" + fresh "^0.5.2" + http-assert "^1.1.0" + http-errors "^1.2.8" + is-generator-function "^1.0.3" + koa-compose "^4.0.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + mime-types "^2.0.7" + on-finished "^2.1.0" + only "0.0.2" + parseurl "^1.3.0" + statuses "^1.2.0" + type-is "^1.5.5" + vary "^1.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +methods@1.x, methods@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.0.7, mime-types@^2.1.3, mime-types@~2.1.15, mime-types@~2.1.16: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^2.3.4: + version "2.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" + dependencies: + commander "2.3.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.2" + glob "3.2.11" + growl "1.9.2" + jade "0.26.3" + mkdirp "0.5.1" + supports-color "1.2.0" + to-iso-string "0.0.2" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +on-finished@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +only@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +parseurl@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +qs@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" + +readable-stream@1.0.27-1: + version "1.0.27-1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +reduce-component@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +"statuses@>= 1.3.1 < 2", statuses@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +superagent@^1.7.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-1.8.5.tgz#1c0ddc3af30e80eb84ebc05cb2122da8fe940b55" + dependencies: + component-emitter "~1.2.0" + cookiejar "2.0.6" + debug "2" + extend "3.0.0" + form-data "1.0.0-rc3" + formidable "~1.0.14" + methods "~1.1.1" + mime "1.3.4" + qs "2.3.3" + readable-stream "1.0.27-1" + reduce-component "1.0.1" + +supertest@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-1.2.0.tgz#850a795f9068d2faf19e01799ff09962e0ce43be" + dependencies: + methods "1.x" + superagent "^1.7.2" + +supports-color@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + +to-iso-string@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" + +type-is@^1.5.5: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +vary@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" |
