{"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"keywords":["koa","middleware","convert"],"dist-tags":{"latest":"1.2.0"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"description":"convert koa legacy generator-based middleware to promise-based middleware","readme":"\n# koa-convert\n\n[![npm version](https://img.shields.io/npm/v/koa-convert.svg)](https://npmjs.org/package/koa-convert)\n[![build status](https://travis-ci.org/gyson/koa-convert.svg)](https://travis-ci.org/gyson/koa-convert)\n\nConvert koa legacy ( 0.x & 1.x ) generator middleware to modern promise middleware ( 2.x ).\n\nIt could also convert modern promise middleware back to legacy generator middleware ( useful to help modern middleware support koa 0.x or 1.x ).\n\n## Note\n\nIt should be able to convert any legacy generator middleware to modern promise middleware ( or convert it back ).\n\nPlease let me know ( send a issue ) if you fail to do so.\n\n## Installation\n\n```\n$ npm install koa-convert\n```\n\n## Usage\n\n```js\nconst Koa = require('koa') // koa v2.x\nconst convert = require('koa-convert')\nconst app = new Koa()\n\napp.use(modernMiddleware)\n\napp.use(convert(legacyMiddleware))\n\napp.use(convert.compose(legacyMiddleware, modernMiddleware))\n\nfunction * legacyMiddleware (next) {\n  // before\n  yield next\n  // after\n}\n\nfunction modernMiddleware (ctx, next) {\n  // before\n  return next().then(() => {\n    // after\n  })\n}\n```\n\n## Distinguish legacy and modern middleware\n\nIn koa 0.x and 1.x ( without experimental flag ), `app.use` has an assertion that all ( legacy ) middleware must be generator function and it's tested with `fn.constructor.name == 'GeneratorFunction'` at [here](https://github.com/koajs/koa/blob/7fe29d92f1e826d9ce36029e1b9263b94cba8a7c/lib/application.js#L105).\n\nTherefore, we can distinguish legacy and modern middleware with `fn.constructor.name == 'GeneratorFunction'`.\n\n## Migration\n\n`app.use(legacyMiddleware)` is everywhere in 0.x and 1.x and it would be painful to manually change all of them to `app.use(convert(legacyMiddleware))`.\n\nYou can use following snippet to make migration easier.\n\n```js\nconst _use = app.use\napp.use = x => _use.call(app, convert(x))\n```\n\nThe above snippet will override `app.use` method and implicitly convert all legacy generator middleware to modern promise middleware.\n\nTherefore, you can have both `app.use(modernMiddleware)` and `app.use(legacyMiddleware)` and your 0.x or 1.x should work without modification.\n\nComplete example:\n\n```js\nconst Koa = require('koa') // v2.x\nconst convert = require('koa-convert')\nconst app = new Koa()\n\n// ---------- override app.use method ----------\n\nconst _use = app.use\napp.use = x => _use.call(app, convert(x))\n\n// ---------- end ----------\n\napp.use(modernMiddleware)\n\n// this will be converted to modern promise middleware implicitly\napp.use(legacyMiddleware)\n\nfunction * legacyMiddleware (next) {\n  // before\n  yield next\n  // after\n}\n\nfunction modernMiddleware (ctx, next) {\n  // before\n  return next().then(() => {\n    // after\n  })\n}\n```\n\n## API\n\n#### `convert()`\n\nConvert legacy generator middleware to modern promise middleware.\n\n```js\nmodernMiddleware = convert(legacyMiddleware)\n```\n\n#### `convert.compose()`\n\nConvert and compose multiple middleware (could mix legacy and modern ones) and return modern promise middleware.\n\n```js\ncomposedModernMiddleware = convert.compose(legacyMiddleware, modernMiddleware)\n// or\ncomposedModernMiddleware = convert.compose([legacyMiddleware, modernMiddleware])\n```\n\n#### `convert.back()`\n\nConvert modern promise middleware back to legacy generator middleware.\n\nThis is useful to help modern promise middleware support koa 0.x or 1.x.\n\n```js\nlegacyMiddleware = convert.back(modernMiddleware)\n```\n\n## License\n\nMIT\n","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"users":{"godcore":true,"octetstream":true,"zhjq19660117":true,"jacks":true,"xingtao":true,"princetoad":true,"dmitr":true,"nanxing":true,"52u":true,"lsxlsxxslxsl":true,"nisimjoseph":true,"chinawolf_wyp":true,"hewenxuan":true},"bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"license":"MIT","versions":{"0.0.1":{"name":"koa-convert","version":"0.0.1","description":"convert koa generator-based middleware to promise-based middleware","main":"index.js","scripts":{"test":"mocha test.js"},"repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","dependencies":{"co":"^4.6.0"},"devDependencies":{"mocha":"^2.3.3"},"gitHead":"6cb421c540bfdc6454b20bf99ba7d914b5ce3baf","_id":"koa-convert@0.0.1","_shasum":"64f46a1c7610c31d3d226ce5a73d08284c28230b","_from":".","_npmVersion":"2.14.3","_nodeVersion":"4.1.0","_npmUser":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"dist":{"shasum":"64f46a1c7610c31d3d226ce5a73d08284c28230b","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/koa-convert/-/koa-convert-0.0.1.tgz"},"directories":{}},"0.0.2":{"name":"koa-convert","version":"0.0.2","keywords":["koa","middleware","convert"],"description":"convert koa generator-based middleware to promise-based middleware","main":"index.js","scripts":{"test":"mocha test.js"},"repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","dependencies":{"co":"^4.6.0"},"devDependencies":{"mocha":"^2.3.3"},"gitHead":"3e69dd95186ff65660574eecc6444a6ac34d6fb5","_id":"koa-convert@0.0.2","_shasum":"ccf5a59e40e6eba6effa8e496dd982b80356ceda","_from":".","_npmVersion":"2.14.3","_nodeVersion":"4.1.0","_npmUser":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"dist":{"shasum":"ccf5a59e40e6eba6effa8e496dd982b80356ceda","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/koa-convert/-/koa-convert-0.0.2.tgz"},"directories":{}},"1.0.0":{"name":"koa-convert","version":"1.0.0","keywords":["koa","middleware","convert"],"description":"convert koa legacy generator-based middleware to promise-based middleware","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"main":"index.js","scripts":{"test":"standard && mocha test.js"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","dependencies":{"co":"^4.6.0","koa-compose":"^3.0.0"},"devDependencies":{"koa":"^2.0.0-alpha.2","mocha":"^2.3.3","standard":"^5.3.1","supertest":"^1.1.0"},"engines":{"node":">= 4"},"gitHead":"8eca268f973e7f682a52d0b5d160f46eebbd9059","_id":"koa-convert@1.0.0","_shasum":"3e2a667286a899876862771fd3c46485a170dda3","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.0","_npmUser":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"dist":{"shasum":"3e2a667286a899876862771fd3c46485a170dda3","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/koa-convert/-/koa-convert-1.0.0.tgz"},"directories":{}},"1.1.0":{"name":"koa-convert","version":"1.1.0","keywords":["koa","middleware","convert"],"description":"convert koa legacy generator-based middleware to promise-based middleware","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"main":"index.js","scripts":{"test":"standard && mocha test.js"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","dependencies":{"co":"^4.6.0","koa-compose":"^3.0.0"},"devDependencies":{"koa":"^2.0.0-alpha.2","koa-v1":"^1.0.0","mocha":"^2.3.3","standard":"^5.3.1","supertest":"^1.1.0"},"engines":{"node":">= 4"},"gitHead":"47548f5d28c67783de811c2fa80655f574fa2475","_id":"koa-convert@1.1.0","_shasum":"616e6f5950ff21922faa70c3bfc159c56b4f52b8","_from":".","_npmVersion":"3.3.6","_nodeVersion":"5.0.0","_npmUser":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"dist":{"shasum":"616e6f5950ff21922faa70c3bfc159c56b4f52b8","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/koa-convert/-/koa-convert-1.1.0.tgz"},"directories":{}},"1.2.0":{"name":"koa-convert","version":"1.2.0","keywords":["koa","middleware","convert"],"description":"convert koa legacy generator-based middleware to promise-based middleware","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"main":"index.js","scripts":{"test":"standard && mocha test.js"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","dependencies":{"co":"^4.6.0","koa-compose":"^3.0.0"},"devDependencies":{"koa":"^2.0.0-alpha.2","koa-v1":"^1.0.0","mocha":"^2.3.3","standard":"^5.3.1","supertest":"^1.1.0"},"engines":{"node":">= 4"},"gitHead":"da39a5291fb1d2bfa5f2406423091bbf185d2639","_id":"koa-convert@1.2.0","_shasum":"da40875df49de0539098d1700b50820cebcd21d0","_from":".","_npmVersion":"3.3.6","_nodeVersion":"5.0.0","_npmUser":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"}],"dist":{"shasum":"da40875df49de0539098d1700b50820cebcd21d0","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/koa-convert/-/koa-convert-1.2.0.tgz"},"directories":{}}},"name":"koa-convert","time":{"modified":"2017-07-30T22:38:08.569Z","created":"2015-10-11T02:04:32.906Z","0.0.1":"2015-10-11T02:04:32.906Z","0.0.2":"2015-10-11T02:08:24.832Z","1.0.0":"2015-11-01T11:05:34.556Z","1.1.0":"2015-11-06T15:53:57.187Z","1.2.0":"2015-11-16T19:14:25.277Z"},"readmeFilename":"README.md","homepage":"https://github.com/gyson/koa-convert#readme"}