{"_id":"koa-convert","_rev":"29-f3e4c45705c471e76b2ea28cfd6f6760","name":"koa-convert","description":"convert modern Koa legacy generator-based middleware to promise-based middleware","dist-tags":{"latest":"2.0.0"},"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":"https://registry.npmjs.org/koa-convert/-/koa-convert-0.0.1.tgz","integrity":"sha512-UESipiHlGw8uAMYMNXg4faCxeBSd/5k+x2hr692OEtmvCTaEiWsK8KE3WPmE7zC++Wh5vFsTjq/OTEYdxZpwpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHz1aPekcpI9MX/qA0JVFkYT+a0juMvf1/Fr9Bqve9N3AiAOqUuAKumPwpKQRMlN6pDWm28RQqmAriVysNc7qMBbag=="}]},"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":"https://registry.npmjs.org/koa-convert/-/koa-convert-0.0.2.tgz","integrity":"sha512-j7Ilko2cxxUvSNyfk8ZNNRJkY73Fw+BUTm1IsZC5P+A2/faJeBXAI1Y4nbkcr9g/8KzJdiFUMVNmb9e/m2VEpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbESU2pw18gZ08RiqVz380aDVDvFesvdwwJwOelAaxdAiAzNNBKTndJV2QGSFTqRHBJBNJKQAX8aCToHfb7ZUctXQ=="}]},"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":"https://registry.npmjs.org/koa-convert/-/koa-convert-1.0.0.tgz","integrity":"sha512-osjeGCEKoxp08iwi4EsFeiiXv7miTTHjAQ2OQimtI2rEwrwZoBveF7jMSH2ALl1qf2iTwbYuRuK4LBHG2jJy1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGikY2ADl2gk6gaVOg8pdP/a2tJOjCmmPSML9dvj6o8wIhAJ7H1sx2w3n/OBsXV10Ggpbxupqc1EtvPA+jorhJ11kv"}]},"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":"https://registry.npmjs.org/koa-convert/-/koa-convert-1.1.0.tgz","integrity":"sha512-aNJLycZ2q6HjWObYP3eJpAluVvj89Nt9XJbZS+0QtESi2AvIoGsE6oA7Vx4srBKWMMvfIDL1OCmm63vM8TnpTw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGr3Nrq0SR70r94NM1NzmrxDAwo1WdZ4LqY7xN6rEAPaAiBezhVSA061hShc2CvRFl78imcrnl4eyeTaKQZHAJlgeg=="}]},"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":"https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz","integrity":"sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXfw543OttrYLsPqfuUHiGSOOylGDJYW+c0Gru5pJHhAiEA+FpnfZUiMpP3filtANE+6c8RdE0f/AWu9L0yKgDl2gY="}]},"directories":{}},"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":{"integrity":"sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==","shasum":"86a0c44d81d40551bae22fee6709904573eea4f5","tarball":"https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz","fileCount":4,"unpackedSize":9262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWnPdCRA9TVsSAnZWagAAyB4P/AoeRv7OiaaYKi7g6Md9\nFnc2W0HvAd7rLBpGLB27WjP7DuQGjCz0RtMBGQRksoZYLt8mop81/Xgmpton\nRWolyctA0+aXXmvC48ZBI1q52k8W2g5C13tjL/x66YScRkmROW+FHbPeIJfC\nw8vZZ6BxxKDgBlA7YjPvvhRxwcrAc0/648sfyHB5BPh2WfsOZzue53WQxFwd\nPYXVxJMRwsAH3FWAY52GIcrhTTM1jj103iWPWHVW4wTXrS4Se0FMIXs4M+d3\nEUBwwv4YGl7aCLH9PiaZWBcGE0ERODmCXiKbwIgqONJDPiNsRbb1V8TGATDG\nZo9/8xf1Sd0oaGfge4j1JptuIq04ipXCwLWAmCdbKr5yHc5Mg5Z6gNi/NSG1\nrJRNV2eme19h6uGOg3wQMBFUWAfHiUGibLAsstSiZl8Z+4E7EULMcD3MSpcO\nIZ2ZLhq3UYSPhheZ6IINXzdGfBN3egIE9hKz8XfHHUFUDPwSp8h1w3vs6fOA\neo9qKW/8Xr/w3Z2JZn6Trj7dvTdmdZ3dRROpnsjVgpZmksr6sOz0CZKdLpvr\nbr4ufi/F5gbNVMCYh1fjrP7lclMAw8ALbxcsAESfMqRvedirbhgEFCFGZMhk\nk2sLIva8MSNC0L73LXx9Nm/RpWs7xIcZ1bLYlYMHUj5iuKNPOsoiB4PBeXaW\nbFfg\r\n=0Mx0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR+F0SN87IIyRln/IRSNOrxj7pF7Fp8Iy4RvIzeWhDkwIgPRt19kk09J/xi/mgNchmXe7tT1UCnJ3H75VR/4iOgpc="}]},"maintainers":[{"name":"gyson","email":"eilian.yunsong@gmail.com"},{"name":"niftylettuce","email":"niftylettuce@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-convert_2.0.0_1599763421219_0.8541355303430036"},"_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","maintainers":[{"email":"niftylettuce@gmail.com","name":"niftylettuce"},{"email":"npm@titanism.com","name":"titanism"}],"time":{"modified":"2022-06-19T09:13:38.404Z","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","2.0.0":"2020-09-10T18:43:41.324Z"},"homepage":"https://github.com/gyson/koa-convert#readme","repository":{"type":"git","url":"git+https://github.com/gyson/koa-convert.git"},"author":{"name":"gyson","email":"eilian.yunsong@gmail.com"},"bugs":{"url":"https://github.com/gyson/koa-convert/issues"},"license":"MIT","readmeFilename":"README.md","keywords":["koa","middleware","convert","back","generator","promise","generator-based-middleware","promise-based-middleware","support"],"users":{"godcore":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},"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"}]}