{"_id":"koa-convert","_rev":"244323","name":"koa-convert","description":"convert modern Koa legacy generator-based middleware to promise-based middleware","dist-tags":{"latest":"2.0.0"},"maintainers":[{"name":"niftylettuce","email":""},{"name":"titanism","email":""}],"time":{"modified":"2021-06-03T16:01:40.000Z","created":"2015-10-11T02:04:32.906Z","2.0.0":"2020-09-10T18:43:41.324Z","1.2.0":"2015-11-16T19:14:25.277Z","1.1.0":"2015-11-06T15:53:57.187Z","1.0.0":"2015-11-01T11:05:34.556Z","0.0.2":"2015-10-11T02:08:24.832Z","0.0.1":"2015-10-11T02:04:32.906Z"},"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,"atomgao":true,"tomgao365":true,"edwardxyt":true,"tedyhy":true},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"versions":{"2.0.0":{"name":"koa-convert","version":"2.0.0","description":"convert modern Koa legacy generator-based middleware to promise-based middleware","main":"index.js","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"standard":{"ignore":["index.spec.js"]},"scripts":{"lint":"standard","pretest":"npm run lint","test":"mocha index.spec.js --exit","precoverage":"rimraf .nyc_output coverage","coverage":"nyc npm run test","ci":"npm run coverage"},"keywords":["koa","middleware","convert","back","generator","promise","generator-based-middleware","promise-based-middleware","support"],"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"contributors":[{"name":"gyson","email":"eilian.yunsong@gmail.com"},{"name":"Lloyd Brookes","email":"75pound@gmail.com"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com","url":"https://www.3imed-jaberi.com"}],"license":"MIT","dependencies":{"co":"^4.6.0","koa-compose":"^4.1.0"},"devDependencies":{"koa":"^2.13.0","koa-v1":"npm:koa@1.7.0","mocha":"^7.1.1","nyc":"^15.1.0","rimraf":"^3.0.2","standard":"^14.3.4","supertest":"^4.0.2"},"engines":{"node":">= 10"},"bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"homepage":"https://github.com/gyson/koa-convert#readme","gitHead":"bb06e77c8cf45d9afcbe5019c7fa9104631d5207","_id":"koa-convert@2.0.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","_npmUser":{"name":"niftylettuce","email":"niftylettuce@gmail.com"},"dist":{"shasum":"86a0c44d81d40551bae22fee6709904573eea4f5","size":3482,"noattachment":false,"key":"/koa-convert/-/koa-convert-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-2.0.0.tgz"},"maintainers":[{"name":"niftylettuce","email":""},{"name":"titanism","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-convert_2.0.0_1599763421219_0.8541355303430036"},"_hasShrinkwrap":false,"publish_time":1599763421324,"_cnpm_publish_time":1599763421324},"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":"niftylettuce","email":""},{"name":"titanism","email":""}],"dist":{"shasum":"da40875df49de0539098d1700b50820cebcd21d0","size":3806,"noattachment":false,"key":"/koa-convert/-/koa-convert-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-1.2.0.tgz"},"directories":{},"publish_time":1447701265277,"_cnpm_publish_time":1447701265277,"_hasShrinkwrap":false},"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":"niftylettuce","email":""},{"name":"titanism","email":""}],"dist":{"shasum":"616e6f5950ff21922faa70c3bfc159c56b4f52b8","size":3707,"noattachment":false,"key":"/koa-convert/-/koa-convert-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-1.1.0.tgz"},"directories":{},"publish_time":1446825237187,"_cnpm_publish_time":1446825237187,"_hasShrinkwrap":false},"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":"niftylettuce","email":""},{"name":"titanism","email":""}],"dist":{"shasum":"3e2a667286a899876862771fd3c46485a170dda3","size":3202,"noattachment":false,"key":"/koa-convert/-/koa-convert-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-1.0.0.tgz"},"directories":{},"publish_time":1446375934556,"_cnpm_publish_time":1446375934556,"_hasShrinkwrap":false},"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":"niftylettuce","email":""},{"name":"titanism","email":""}],"dist":{"shasum":"ccf5a59e40e6eba6effa8e496dd982b80356ceda","size":1982,"noattachment":false,"key":"/koa-convert/-/koa-convert-0.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-0.0.2.tgz"},"directories":{},"publish_time":1444529304832,"_cnpm_publish_time":1444529304832,"_hasShrinkwrap":false},"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":"niftylettuce","email":""},{"name":"titanism","email":""}],"dist":{"shasum":"64f46a1c7610c31d3d226ce5a73d08284c28230b","size":1957,"noattachment":false,"key":"/koa-convert/-/koa-convert-0.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/koa-convert/download/koa-convert-0.0.1.tgz"},"directories":{},"publish_time":1444529072906,"_cnpm_publish_time":1444529072906,"_hasShrinkwrap":false}},"readme":"# koa-convert\n\n[![Build Status][travis-img]][travis-url]\n[![NPM version][npm-badge]][npm-url]\n[![License][license-badge]][license-url]\n![Code Size][code-size-badge]\n\n<!-- [![Coverage Status][coverage-img]][coverage-url] -->\n\n<!-- ***************** -->\n\n[travis-img]: https://travis-ci.org/koajs/convert.svg?branch=master\n[travis-url]: https://travis-ci.org/koajs/convert\n\n<!-- \n  WAIT FOR ACCESS \n  [coverage-img]: https://coveralls.io/repos/github/koajs/convert/badge.svg?branch=master\n  [coverage-url]: https://coveralls.io/github/koajs/convert?branch=master\n-->\n\n[npm-badge]: https://img.shields.io/npm/v/koa-better-request-id.svg?style=flat\n[npm-url]: https://www.npmjs.com/package/koa-better-request-id\n[license-badge]: https://img.shields.io/badge/license-MIT-green.svg?style=flat-square\n[license-url]: https://github.com/koajs/koa-convert/blob/master/LICENSE\n[code-size-badge]: https://img.shields.io/github/languages/code-size/koajs/koa-convert\n\n<!-- ***************** -->\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 v0.x or v1.x).\n\n## Note\n\nRouter middleware is special case here. Because it reimplements middleware composition internally, we cannot not simply convert it.\n\nYou may use following packages for [routing](https://github.com/koajs/koa/wiki#routing-and-mounting), which are koa 2.x ready now:\n\n* [koa-route@3.0.0](https://github.com/koajs/route/tree/next)\n* [koa-simple-router](https://github.com/gyson/koa-simple-router)\n* [koa-router@next](https://github.com/alexmingoia/koa-router/tree/master)\n* [koa-66](https://github.com/menems/koa-66)\n\n## Installation\n\n```bash\n# npm ..\n$ npm i koa-convert\n# yarn ..\n$ yarn add 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\n[MIT](LICENSE)\n","_attachments":{},"homepage":"https://github.com/gyson/koa-convert#readme","bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"license":"MIT"}