{"versions":{"10.0.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"10.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"gitHead":"344ba0b323bdb78eefc800348577c6c67b99ea3c","_id":"@koa/router@10.0.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"699115561afbd2740e2848ba299fc76b9e058ad6","size":11005,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-10.0.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_10.0.0_1604325395737_0.4401475459974493"},"_hasShrinkwrap":false,"publish_time":1604325395885,"_cnpm_publish_time":1604325395885,"contributors":[]},"9.4.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.4.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.4.0","dist":{"shasum":"734b64c0ae566eb5af752df71e4143edc4748e48","size":11069,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.4.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.4.0_1597369331812_0.058660621352691455"},"_hasShrinkwrap":false,"publish_time":1597369331936,"_cnpm_publish_time":1597369331936,"contributors":[]},"9.3.1":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.3.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.3.1","dist":{"shasum":"814b0f357da616b99ee22259644cd928f2c9e60e","size":11057,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.3.1.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.3.1_1593938234090_0.40888145585580515"},"_hasShrinkwrap":false,"publish_time":1593938234250,"_cnpm_publish_time":1593938234250,"contributors":[]},"9.3.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.3.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.3.0","dist":{"shasum":"cc0a68a9a16a90c2dafb5cf105f51ad27957d66c","size":11056,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.3.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.3.0_1593938016177_0.06332091928581818"},"_hasShrinkwrap":false,"publish_time":1593938016388,"_cnpm_publish_time":1593938016388,"contributors":[]},"9.2.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.2.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.2.0","dist":{"shasum":"97f2e47b438ce8d6b8c6ea36743a12d6ada68008","size":11055,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.2.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.2.0_1593917043800_0.5808183603481458"},"_hasShrinkwrap":false,"publish_time":1593917043930,"_cnpm_publish_time":1593917043930,"contributors":[]},"9.1.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.1.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.1.0","dist":{"shasum":"1bb1b5a219e8004e649c8f9acfe4bc58f066dfec","size":10992,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.1.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.1.0_1593536438713_0.0028596691513282924"},"_hasShrinkwrap":false,"publish_time":1593536438850,"_cnpm_publish_time":1593536438850,"contributors":[]},"9.0.1":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"9.0.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\nCopyright (c) 2019-present Nick Baugh and Koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","_id":"@koa/router@9.0.1","dist":{"shasum":"4090a14223ea7e78aa13b632761209cba69acd95","size":10975,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-9.0.1.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_9.0.1_1590826107117_0.5989932576734835"},"_hasShrinkwrap":false,"publish_time":1590826107216,"_cnpm_publish_time":1590826107216,"contributors":[]},"8.0.8":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"8.0.8","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"dependencies":{"debug":"^4.1.1","http-errors":"^1.7.3","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"1.x","urijs":"^1.19.2"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^6.2.2","should":"^13.2.3","supertest":"^4.0.2"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/koa-router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"NODE_ENV=test mocha test/**/*.js"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@8.0.8","dist":{"shasum":"95f32d11373d03d89dcb63fabe9ac6f471095236","size":10781,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.8.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.8_1581244445622_0.46014698811017807"},"_hasShrinkwrap":false,"publish_time":1581244445824,"_cnpm_publish_time":1581244445824,"contributors":[]},"8.0.7":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"8.0.7","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"dependencies":{"debug":"^4.1.1","http-errors":"^1.7.3","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"1.x","urijs":"^1.19.2"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^6.2.2","should":"^13.2.3","supertest":"^4.0.2"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/koa-router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"NODE_ENV=test mocha test/**/*.js"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@8.0.7","dist":{"shasum":"0c6b747eae85b012ae09ef9d2d7267b2e877c156","size":10769,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.7.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.7_1580973215905_0.45324545016822504"},"_hasShrinkwrap":false,"publish_time":1580973216009,"_cnpm_publish_time":1580973216009,"contributors":[]},"8.0.6":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"8.0.6","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"dependencies":{"debug":"^4.1.1","http-errors":"^1.7.3","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"1.x","urijs":"^1.19.2"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^6.2.2","should":"^13.2.3","supertest":"^4.0.2"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/koa-router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"NODE_ENV=test mocha test/**/*.js"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@8.0.6","dist":{"shasum":"bd3f76e7f61450b47691ed944ce8e052b861139d","size":10579,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.6.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.6_1579727719599_0.5896426470799567"},"_hasShrinkwrap":false,"publish_time":1579727719781,"_cnpm_publish_time":1579727719781,"contributors":[]},"8.0.5":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","version":"8.0.5","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"dependencies":{"debug":"^4.1.1","http-errors":"^1.7.3","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"1.x","urijs":"^1.19.2"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^6.2.2","should":"^13.2.3","supertest":"^4.0.2"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/koa-router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"NODE_ENV=test mocha test/**/*.js"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@8.0.5","dist":{"shasum":"c0ad5b2ca006c3a5abf70a2a9e68b2a820ca61b3","size":10570,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.5.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.5_1576002172046_0.24582129104826644"},"_hasShrinkwrap":false,"publish_time":1576002172155,"_cnpm_publish_time":1576002172155,"contributors":[]},"8.0.3":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/koajs/koa-router.git"},"main":"lib/router.js","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"version":"8.0.3","keywords":["koa","middleware","router","route"],"dependencies":{"debug":"^3.1.0","http-errors":"^1.3.1","koa-compose":"^3.0.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.1","koa":"2.2.0","mocha":"^6.2.0","should":"^6.0.3","supertest":"^4.0.2"},"scripts":{"test":"NODE_ENV=test mocha test/**/*.js","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md"},"engines":{"node":">= 8.0.0"},"license":"MIT","gitHead":"6e349888b6155018c1edb2d043c6dd0d3cb2fef6","bugs":{"url":"https://github.com/koajs/koa-router/issues"},"homepage":"https://github.com/koajs/koa-router#readme","_id":"@koa/router@8.0.3","_nodeVersion":"12.12.0","_npmVersion":"6.13.1","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"657a4b91f4085523d36c5ea1fdd32b5e33b215f7","size":10437,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.3.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.3_1575914687410_0.28982948778598816"},"_hasShrinkwrap":false,"publish_time":1575914687892,"_cnpm_publish_time":1575914687892,"contributors":[]},"8.0.2":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/koajs/koa-router.git"},"main":"lib/router.js","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"version":"8.0.2","keywords":["koa","middleware","router","route"],"dependencies":{"debug":"^3.1.0","http-errors":"^1.3.1","koa-compose":"^3.0.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.1","koa":"2.2.0","mocha":"^6.2.0","should":"^6.0.3","supertest":"^4.0.2"},"scripts":{"test":"NODE_ENV=test mocha test/**/*.js","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md"},"engines":{"node":">= 8.0.0"},"license":"MIT","gitHead":"d32017202ab57dfa280b873b146841cd00967c69","bugs":{"url":"https://github.com/koajs/koa-router/issues"},"homepage":"https://github.com/koajs/koa-router#readme","_id":"@koa/router@8.0.2","_nodeVersion":"10.15.3","_npmVersion":"6.11.3","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"46a48d58cb0d76dc7a3735f14d1e66bbe2116575","size":10351,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.2.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.2_1570723172824_0.5571461882622766"},"_hasShrinkwrap":false,"publish_time":1570723173001,"_cnpm_publish_time":1570723173001,"contributors":[]},"8.0.1":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/koajs/koa-router.git"},"main":"lib/router.js","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"version":"8.0.1","keywords":["koa","middleware","router","route"],"dependencies":{"debug":"^3.1.0","http-errors":"^1.3.1","koa-compose":"^3.0.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^1.1.1","koa":"2.2.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test":"NODE_ENV=test mocha test/**/*.js","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md"},"engines":{"node":">= 8.0.0"},"license":"MIT","gitHead":"28bb10256010a8a30e02ab997af0dbaaeac45cdb","bugs":{"url":"https://github.com/koajs/koa-router/issues"},"homepage":"https://github.com/koajs/koa-router#readme","_id":"@koa/router@8.0.1","_nodeVersion":"10.15.3","_npmVersion":"6.10.2","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"4d3efdb2e07cc3e78c21046a9ace6b9911ae441b","size":10350,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.1.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.1_1567471283931_0.13791760254334373"},"_hasShrinkwrap":false,"publish_time":1567471284074,"_cnpm_publish_time":1567471284074,"contributors":[]},"8.0.0":{"name":"@koa/router","description":"Router middleware for koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/koajs/koa-router.git"},"main":"lib/router.js","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"version":"8.0.0","keywords":["koa","middleware","router","route"],"dependencies":{"debug":"^3.1.0","http-errors":"^1.3.1","koa-compose":"^3.0.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^1.1.1","koa":"2.2.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test":"NODE_ENV=test mocha test/**/*.js","docs":"NODE_ENV=test jsdoc2md -t ./lib/README_tpl.hbs --src ./lib/*.js  >| README.md"},"engines":{"node":">= 4"},"license":"MIT","gitHead":"94698a3231ab76e16c80579210a4609bdc3cc629","bugs":{"url":"https://github.com/koajs/koa-router/issues"},"homepage":"https://github.com/koajs/koa-router#readme","_id":"@koa/router@8.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"anonymous","email":"dead_horse@qq.com"},"dist":{"shasum":"fd4ffa6f03d8293a04c023cb4a22b612401fbe70","size":11885,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-8.0.0.tgz"},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"coderhaoxin@outlook.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_8.0.0_1560697433380_0.8428798133399722"},"_hasShrinkwrap":false,"publish_time":1560697433524,"_cnpm_publish_time":1560697433524,"contributors":[]},"10.1.1":{"name":"@koa/router","description":"","version":"10.1.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"gitHead":"90dd73c44d0e76db0890b552023711de896c12d3","_id":"@koa/router@10.1.1","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"8e5a85c9b243e0bc776802c0de564561e57a5f78","size":11014,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-10.1.1.tgz"},"directories":{},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_10.1.1_1629648183702_0.4322557841654513"},"_hasShrinkwrap":false,"publish_time":1629648183875,"_cnpm_publish_time":1629648183875,"contributors":[]},"10.1.0":{"name":"@koa/router","description":"","version":"10.1.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"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"},"devDependencies":{"@ladjs/env":"^1.0.0","expect.js":"^0.3.1","jsdoc-to-markdown":"^5.0.3","koa":"^2.11.0","mocha":"^7.0.1","nyc":"^15.0.0","should":"^13.2.3","supertest":"^4.0.2","wrk":"^1.2.0"},"engines":{"node":">= 8.0.0"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","test":"mocha test/**/*.js","coverage":"nyc npm run test","bench":"make -C bench"},"gitHead":"fa48560c8a88ad677c52f741b55b7e12bfb90da6","_id":"@koa/router@10.1.0","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","_npmUser":{"name":"anonymous","email":"niftylettuce@gmail.com"},"dist":{"shasum":"bc1d0d9bb1051ece8b862eed9c91545e08e7a069","size":11014,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-10.1.0.tgz"},"directories":{},"maintainers":[{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_10.1.0_1626812740940_0.5226656436264165"},"_hasShrinkwrap":false,"publish_time":1626812741040,"_cnpm_publish_time":1626812741040,"contributors":[]},"11.0.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"11.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.2.1"},"devDependencies":{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@ladjs/env":"^3.0.0","ava":"^4.3.0","cross-env":"^7.0.3","eslint":"^8.19.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.1","jsdoc-to-markdown":"^7.1.1","koa":"^2.13.4","lint-staged":"^13.0.3","mocha":"^10.0.0","nyc":"^15.1.0","remark-cli":"^11.0.0","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.2.4","wrk":"^1.2.1","xo":"^0.50.0"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"gitHead":"54a3198dd9e244526a8232d093acba158f527070","_id":"@koa/router@11.0.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-97Ue+TARn9XcYMSYGmL4tpWRlZNGAJKWa1scax0qFLv8MasZilyhfCADvShmIF/F1KQkHndUzzFRe16IwZrTxg==","shasum":"7413932c730a286207614718ece069ec6f38370f","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-11.0.0.tgz","fileCount":6,"unpackedSize":31129,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDYNzb5rjqSaPGQJ8X7oYUvX9XbLUGTJexcm2I4ngCzKAiAAyoY3u0WV5fmoWvTW1XBkq6qMqoJK+/cUh3gIpl8yoA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwpKwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpY/A//W4N7po0owmm/yW911PSkLpI4u3XxcyjGw+/EuUdN5M2690IH\r\nTY0zR5EBANSuDa4L4261WAg5hxiYHbAWLufhpkZbMswXUGgnZr5cNiEQGJId\r\nNdqAZPWV55cHGD3unHDZrbYNy+nfxjMKBMbJjKsVwp3+QR/j8ZciFWQ6lWCi\r\nPWDMynbqlIUXx3lw9q8/Om9psop1M/hYiNMY7pqYiIIO3iK9trgSNfbVBzRc\r\nmq8hU99xu32RnY92PIk6+HBatP/BWff/46t+9MWU2dLVbwr40+J+SyvLa2oO\r\nLiRu0rhlgXY8e0ggc9iQOhyDUThjtm0mTI72FiJNjyFPGn1Qs2A6JPWOmCSH\r\nA5t7hv8eWaI7TYU39ipeaik+LdKOL63BffuagUWBB50+sqEgK/KwfSsUgzTz\r\n0/Iq5WmKqW8zkElx5oF/Y0x0bMSHyGxw/qF9MOD9CYfZ7TgPK54/whaCSBEl\r\nOmOk/YNUxAfFauP4Q954AMNsPFAMYOh7MSSJc5JMYL7OC8Zz3SsF1OGVB2jB\r\n4LESh0C7Ih0CpXVFlfttgDMIDNsCKbNKeuf2Ur+gNktG7vuixAqykr17+MzQ\r\nw8pD6ncIWZAtzu5sG7Cmm9mqumqDOELqHhPHa4k04ZKEtZhK6rC/YwYfppEK\r\nFoFsiu4RkhqZDbT/WX3sBezPCf8FezCc59Q=\r\n=fmEE\r\n-----END PGP SIGNATURE-----\r\n","size":9526},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"haoxinst@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_11.0.0_1656918704216_0.9687930599032224"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-07-04T07:22:52.060Z"},"11.0.1":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"11.0.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.2.1"},"devDependencies":{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@ladjs/env":"^3.0.0","ava":"^4.3.0","cross-env":"^7.0.3","eslint":"^8.19.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.1","jsdoc-to-markdown":"^7.1.1","koa":"^2.13.4","lint-staged":"^13.0.3","mocha":"^10.0.0","nyc":"^15.1.0","remark-cli":"^11.0.0","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.2.4","wrk":"^1.2.1","xo":"^0.50.0"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"gitHead":"8fe1d543d118c695f37c4081fa2842fe6f8aca0d","_id":"@koa/router@11.0.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-jZ5ISytdHJWUPiXmxIpT/rk7rCRD/gnwYP3WKlQ0kOLWAtCeFbURTlP2zG0VyALKq4NtVMf0uEMFreQJWFOhaw==","shasum":"9df822273511ea6d4f709d646eb32c063f4acbc0","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-11.0.1.tgz","fileCount":6,"unpackedSize":32160,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlseOE2vL9Zk1bGW9lPp2L1Den+5JkTtPhLNGf1QBcgAiEAqdXoeHYEoohZvHoRNNa6c1W40Jdvio5796zv/MThaAc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwqpBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq98g/+NwXU/TvCwqE37lLyo2WEzAbILbxhuGfVG8ma15GYIE6EqDH6\r\n38aY4MXcb6o/MU+0PwHMqoaSzi62I6fGoHjzN5Xg/iFn/4UKyBf2OHXO69g8\r\nurJxVOCIXeU8NdAUD5OzSiruTF2VFeJ5aq43yseDMbdsvI7GmPje4SwHqBuB\r\niH1PFej82oCXgmZ2mxXtnTaBhF8tL3+j/i4Pye+UxuJqgNipBETbmDQMI3WI\r\nVfY3Ukf1KHha+i2ue/FCCmrTkiR8hQ8s30Ad1VB3esNreqrpH6mC1+9+ebrJ\r\nAFFYxBoaotXzof2s9TlZbSqT6jWpNsa7fDgxE2FIWoV8e95fc1QNeYzkPB68\r\nOWbMKUm4dhXhxWUPGY1oRP93VLGzAZvodngAZlNwBrXnKYluJIkT4sKYLGGD\r\nZKGYoitguHVF0iaAnlx6+69kDvWmZzPS5pIFMYCrSkkaZfQ49SrefWYxjODO\r\nJ3XHXR872jwTBJHL1GGqv19Wogqwm+hGorD7V3QuNzzNFl0FV1bp4DmDsRAZ\r\neVb+0OhT8jVl2/ui3Mw1PCJcAeL3DOcAiZQYMQvpT0qC5aqC1BbF+BcUUchJ\r\n0fcpT/dhysXXRBWISiZ25vmCWivGTli9pQ5CoIwdlLSHF2gLdcGC8vEVVuXI\r\nkNKwEvblY7NtBuaXJiJ9ad6rV3Xdz6EddhM=\r\n=zARH\r\n-----END PGP SIGNATURE-----\r\n","size":9813},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"haoxinst@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_11.0.1_1656924737121_0.5530526809484022"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-07-04T09:00:05.352Z"},"12.0.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"12.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.2.1"},"devDependencies":{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@ladjs/env":"^3.0.0","ava":"^4.3.0","cross-env":"^7.0.3","eslint":"^8.19.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.1","jsdoc-to-markdown":"^7.1.1","koa":"^2.13.4","lint-staged":"^13.0.3","mocha":"^10.0.0","nyc":"^15.1.0","remark-cli":"^11.0.0","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.2.4","wrk":"^1.2.1","xo":"^0.50.0"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"gitHead":"c3bbb659145837f9652697a1d32c342cbc323f0d","_id":"@koa/router@12.0.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-cnnxeKHXlt7XARJptflGURdJaO+ITpNkOHmQu7NHmCoRinPbyvFzce/EG/E8Zy81yQ1W9MoSdtklc3nyaDReUw==","shasum":"2ae7937093fd392761c0e5833c368379d4a35737","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-12.0.0.tgz","fileCount":6,"unpackedSize":32195,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAySB0kzfUALf75cCCFFV43Jk6LeueaXJaxVejW02F8lAiEA7jtGO9PBam5psYZBDHkTMkgl4F9g4kloK8wigL69iO0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1f5jACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr8Zg/9HFWvvwCxdo9mwTla76vyrzi39yNZ4NQH9OHRBvAxBIWwEa+Z\r\nBms4j48mkKTKhK8IswMh+Jk67K+vCnwWd7kH1INpZ8gH30k4RMM2Syw1UXfc\r\nC1Vbhdob3r0CP8+2mwMloxrvOMAwxx6Lb39qG4Z/FaBWDj8T8OtVkno7uWKo\r\n6Yrt/+vSPC3J9yUj2+RTtB1+x0g4/0C96IgBUtK87BRB/hq/BdCe7lPdAun1\r\nzVlTz+lu5BomU7z9VzOWW0z3XOu4T3LBf9DUcGsyQAIe+LmOuDGD795aGrlF\r\nLWe0qCe9kuJoO30Kv6y4kXcsZR9qvQk/mD1t8TtcfL50qTuCpV3OfTx33YSc\r\nNaAzC+O1y1m9f3pRm2y5D3p7C1zrWopW/twI6HgYRv1v8gB1WTU1ANBkjswx\r\nU/UOLrA/MdYkZtymZSGREIsFsQ4cSewE41PMdvv3CpB0HnUKtG0vWtty9ABc\r\noDziQPmYL/q7KdmZUTlDKIG0948SzDctGrAVwK+iko1tmkZJFIgFCLgSSqpO\r\nCTQGf7KcFTy7VuXl/n2qvB83UtHVmStoyV9dlQarqIip33kCHoBBmTBAlwm8\r\nIKJgguj6/nlTOvRP5yH5RhLCslk3laqN6MS0ryKXLdjkjDdlq1Iicd93T70R\r\niKQpNQ3NKdx/8eRRUWQeWmruNf/9rjbFCKI=\r\n=u1D2\r\n-----END PGP SIGNATURE-----\r\n","size":9824},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"haoxinst@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"tj@vision-media.ca"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_12.0.0_1658191459246_0.3845291990581252"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-07-19T00:47:58.334Z"},"12.0.1":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"12.0.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"debug":"^4.3.4","http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.2.1"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","ava":"^5.3.1","cross-env":"^7.0.3","eslint":"8.39.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.14.2","lint-staged":"^14.0.1","mocha":"^10.2.0","nyc":"^15.1.0","remark-cli":"11","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.3.3","wrk":"^1.2.1","xo":"0.53.1"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"gitHead":"02ad6eedf5ced6ec1eab2138380fd67c63e3f1d7","_id":"@koa/router@12.0.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==","shasum":"1a66f92a630c02832cf5bbf0db06c9e53e423468","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-12.0.1.tgz","fileCount":6,"unpackedSize":32217,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEwIyo248v8ibDvy4cVMFxkYJQpxmU6ZuygdqmRcfXYgIhANIUqOzT1NAffjQ5rAUx1cNaZakgRNdOay53udlBo3jt"}]},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_12.0.1_1697142474678_0.6017668843034785"},"_hasShrinkwrap":false},"11.0.2":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"11.0.2","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"debug":"^4.3.4","http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.2.1"},"devDependencies":{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@ladjs/env":"^3.0.0","ava":"^4.3.0","cross-env":"^7.0.3","eslint":"^8.19.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.1","jsdoc-to-markdown":"^7.1.1","koa":"^2.13.4","lint-staged":"^13.0.3","mocha":"^10.0.0","nyc":"^15.1.0","remark-cli":"^11.0.0","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.2.4","wrk":"^1.2.1","xo":"^0.50.0"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"gitHead":"8fe1d543d118c695f37c4081fa2842fe6f8aca0d","_id":"@koa/router@11.0.2","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-VmlGwc5n0d+0vbudFXWsAHcfLn8cJ34gS4ktf8bxmN1yzmWBGts1IbaAjvNr6LBAXf+/U51qxLNv8oalh/UYKQ==","shasum":"3632f6e7e67c9418e338f3bcaf3d9594509ec533","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-11.0.2.tgz","fileCount":6,"unpackedSize":32152,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2mSrKFWBRT8/9m0mvAxE2/vtE6/qtTDU3qSd8LI1SogIhAPWjIvKV/DauhSj1bfFsWPqCtSJyedZyxAztaFspHnum"}]},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_11.0.2_1697143057684_0.7496985414912727"},"_hasShrinkwrap":false},"13.0.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"13.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","path-to-regexp":"^6.2.2"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","eslint":"^8.39.0","eslint-config-xo-lass":"^2.0.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.15.3","lint-staged":"^14.0.1","mocha":"^10.7.3","nyc":"^17.0.0","remark-cli":"11","remark-preset-github":"^4.0.4","supertest":"^7.0.0","xo":"0.53.1"},"engines":{"node":">= 18"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"_id":"@koa/router@13.0.0","gitHead":"9b7339d95a1603d38951f913ae40a44222210a24","_nodeVersion":"18.20.4","_npmVersion":"10.7.0","dist":{"integrity":"sha512-P278xb5IoLtDn2inRsCzJVKGxt5RkjOivwxGbniMO1sI8bft1/Dr93UsRP5aByT8C74x8zqxDYyPXrQwRKIhjg==","shasum":"66abdb6df583fb10e057ab27443c669078d49dc2","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-13.0.0.tgz","fileCount":6,"unpackedSize":33096,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDHRi4/sdxUA1BfmnbAjcCmqM9QwwycXuYRPja1ztA8WAiBtZFQNtj+0HdVDMqqvtp0rsE84oS8BT3ntdpij+UucBQ=="}],"size":10015},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_13.0.0_1723733675217_0.5713361098143213"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-08-15T14:54:35.432Z","publish_time":1723733675432,"_source_registry_name":"default"},"13.0.1":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"13.0.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","path-to-regexp":"^8.1.0"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","eslint":"^8.39.0","eslint-config-xo-lass":"^2.0.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.15.3","lint-staged":"^14.0.1","mocha":"^10.7.3","nyc":"^17.0.0","remark-cli":"11","remark-preset-github":"^4.0.4","supertest":"^7.0.0","xo":"0.53.1"},"engines":{"node":">= 18"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"_id":"@koa/router@13.0.1","gitHead":"c93c2afb4111490c9fffdd51334bae3212bd5b81","_nodeVersion":"18.20.4","_npmVersion":"10.7.0","dist":{"integrity":"sha512-3NKqQt8pKjTKUBVnQx/E980rB6IyERd8QruImdxIVM2vb8TJWKYPnesw+mfElV/3wmdrc/rWk60Rs41Prr4XgQ==","shasum":"ecd3dd37ac45bcf2b397a96c6a6dc17f9f0ec2f6","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-13.0.1.tgz","fileCount":6,"unpackedSize":34246,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAyf2ZRkJ1VFLbDz4JmeIuMswrf2tkh6ih/PPpcOJ2AlAiB0RtVkDu6hMNicEPhTHuuFMlR7IPnHNIb8sGPFXjUzMQ=="}],"size":10266},"_npmUser":{"name":"anonymous","email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_13.0.1_1726252961646_0.9601766549066513"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-13T18:42:41.841Z","publish_time":1726252961841,"_source_registry_name":"default","deprecated":"Unexpected behavior appears just after bumping 'path-to-regex' dependency. So, please try v12.0.2 or v13.1.0+"},"12.0.2":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"12.0.2","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"}],"dependencies":{"debug":"^4.3.4","http-errors":"^2.0.0","koa-compose":"^4.1.0","methods":"^1.1.2","path-to-regexp":"^6.3.0"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","ava":"^5.3.1","cross-env":"^7.0.3","eslint":"8.39.0","eslint-config-xo-lass":"^2.0.1","expect.js":"^0.3.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.14.2","lint-staged":"^14.0.1","mocha":"^10.2.0","nyc":"^15.1.0","remark-cli":"11","remark-preset-github":"^4.0.4","should":"^13.2.3","supertest":"^6.3.3","wrk":"^1.2.1","xo":"0.53.1"},"engines":{"node":">= 12"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","prextest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia and @koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@12.0.2","dist":{"shasum":"286d51959ed611255faa944818a112e35567835a","integrity":"sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-12.0.2.tgz","fileCount":9,"unpackedSize":38309,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9S7lv+tRIteO0hmOQ2R1eiL+oZL2RYXDXP0JizqLjfAiEA0ncTd/oGgv13kNyUmBel/CvV02n+VFneBvgZI1jMQEg="}],"size":11926},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_12.0.2_1726616043044_0.5191315424442569"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-17T23:34:03.192Z","publish_time":1726616043192,"_source_registry_name":"default"},"13.1.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"13.1.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"http-errors":"^2.0.0","koa-compose":"^4.1.0","path-to-regexp":"^6.3.0"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","eslint":"^8.39.0","eslint-config-xo-lass":"^2.0.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.15.3","lint-staged":"^14.0.1","mocha":"^10.7.3","nyc":"^17.0.0","remark-cli":"11","remark-preset-github":"^4.0.4","supertest":"^7.0.0","xo":"0.53.1"},"engines":{"node":">= 18"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","prextest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia and @koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@13.1.0","dist":{"shasum":"43f4c554444ea4f4a148a5735a9525c6d16fd1b5","integrity":"sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-13.1.0.tgz","fileCount":9,"unpackedSize":39211,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB62nQ9ymi1sPOdBYKXt6qM4XJN/b7Zfo0mrJiD9S33NAiAfj6ZS8+FmcPTsYKSnIFtdlu6+EOO0WMiRoJXQFVNlEw=="}],"size":12066},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"ljharb@gmail.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_13.1.0_1726618176963_0.20028030565757948"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-18T00:09:37.140Z","publish_time":1726618177140,"_source_registry_name":"default"},"13.1.1":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"13.1.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"debug":"^4.4.1","http-errors":"^2.0.0","koa-compose":"^4.1.0","path-to-regexp":"^6.3.0"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","eslint":"^8.39.0","eslint-config-xo-lass":"^2.0.1","fixpack":"^4.0.0","husky":"^8.0.3","jsdoc-to-markdown":"^8.0.0","koa":"^2.15.3","lint-staged":"^14.0.1","mocha":"^10.7.3","nyc":"^17.0.0","remark-cli":"11","remark-preset-github":"^4.0.4","supertest":"^7.0.0","xo":"0.53.1"},"engines":{"node":">= 18"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"xo --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"_id":"@koa/router@13.1.1","gitHead":"2c46aa41a306532d77353c1b8bef8a991931e38a","_nodeVersion":"18.20.4","_npmVersion":"10.7.0","dist":{"integrity":"sha512-JQEuMANYRVHs7lm7KY9PCIjkgJk73h4m4J+g2mkw2Vo1ugPZ17UJVqEH8F+HeAdjKz5do1OaLe7ArDz+z308gw==","shasum":"1291b8adca7f61a31a7f8974d28654654211469d","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-13.1.1.tgz","fileCount":6,"unpackedSize":33261,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFY0YO1lcKBlipP8GUzVjYuHJKZOI7gSBWX7+S/kbUHMAiEAtiWz+XoSL3GyXnPX7d+9O0KV2jQMi3iutyyG4Ig/Y8M="}],"size":10093},"_npmUser":{"name":"anonymous","actor":{"name":"titanism","type":"user","email":"npm@titanism.com"},"email":"npm@titanism.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_13.1.1_1751390181701_0.2285311266792751"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-07-01T17:16:21.906Z","publish_time":1751390181906,"_source_registry_name":"default"},"14.0.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"14.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"debug":"^4.4.1","http-errors":"^2.0.0","koa-compose":"^4.1.0","path-to-regexp":"^8.2.0"},"devDependencies":{"@commitlint/cli":"^17.7.2","@commitlint/config-conventional":"^17.7.0","@ladjs/env":"^4.0.0","chalk":"^5.4.1","eslint":"^9.32.0","eslint-plugin-unicorn":"^60.0.0","fixpack":"^4.0.0","husky":"^9.1.7","jsdoc-to-markdown":"^8.0.0","koa":"^3.0.1","lint-staged":"^14.0.1","mocha":"^11.7.1","nyc":"^17.0.0","remark-cli":"11","remark-preset-github":"^4.0.4","supertest":"^7.0.0"},"engines":{"node":">= 20"},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","main":"lib/router.js","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"make -C bench","benchmark":"node bench/run.js","coverage":"nyc npm run test","docs":"NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js  >| API.md","lint":"eslint . --fix && remark . -qfo && fixpack","prepare":"husky install","pretest":"npm run lint","test":"mocha test/**/*.js","test:watch":"mocha test/**/*.js --watch"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 Alexander C. Mingoia and @koajs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@14.0.0","dist":{"shasum":"c0b8f130d8134674607e22ed856a2772949243cf","integrity":"sha512-LBSu5K0qAaaQcXX/0WIB9PGDevyCxxpnc1uq13vV/CgObaVxuis5hKl3Eboq/8gcb6ebnkAStW9NB/Em2eYyFA==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-14.0.0.tgz","fileCount":9,"unpackedSize":40386,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGKRbJ/vCLiKYwvYZFAcJex/Co7AgvxG3bWH1LFltb33AiAhkdUixO87i/mXObVLMLg6a+1svtEz7REZpB2XJGL4zA=="}],"size":12362},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_14.0.0_1754155127220_0.8759688436069892"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-02T17:18:47.424Z","publish_time":1754155127424,"_source_registry_name":"default"},"15.0.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.0.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.1.0","@commitlint/config-conventional":"^20.0.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.7","@types/koa":"^3.0.1","@types/node":"^24.10.1","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.48.0","@typescript-eslint/parser":"^8.48.0","c8":"^10.1.3","chalk":"^5.4.1","eslint":"^9.39.1","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.2","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.7.1","rimraf":"^6.1.2","supertest":"^7.1.4","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs"}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.0.0","dist":{"shasum":"03d255f0c06fca54b1435c350f9735ec3b36070c","integrity":"sha512-qAoA07CndM5XuBZbTbsnvUj1RNVZtwOvO9xGz7CCE/t4nSopI+xEiFGHyJS1UuSDCt8cJZ9vfCvqbAFga+0y7w==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.0.0.tgz","fileCount":21,"unpackedSize":264080,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDbM9OM2plNPoLajGVDmO2agL2vptPRdc5+RoN5EDEjkAiEAtLVnvTQAPho6hwShXGOHguxdE9iSifBkC9YhnGB93IA="}],"size":47596},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.0.0_1764707952852_0.16733807267482081"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-02T20:39:13.037Z","publish_time":1764707953037,"_source_registry_name":"default"},"15.1.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.1.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.2.0","@commitlint/config-conventional":"^20.2.0","@koa/bodyparser":"^6.0.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.7","@types/koa":"^3.0.1","@types/node":"^25.0.1","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.49.0","@typescript-eslint/parser":"^8.49.0","c8":"^10.1.3","chalk":"^5.4.1","eslint":"^9.39.1","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.7.4","rimraf":"^6.1.2","supertest":"^7.1.4","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.1.0","dist":{"shasum":"e4386cc10a0211d71acf533a867f1168c009f338","integrity":"sha512-0zCmuapmgBHrfVSFjBfCdgnkBnXwRGcG5qHnxVs8ZoTNEJiwSSspgJ5+2NugiqLJS/S0d96KMeNntLqTNWaioQ==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.1.0.tgz","fileCount":9,"unpackedSize":173686,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCoC7iAx2aNezP9BGkwPnAaXWDBl6YP4DVc/Y4MQ/IingIhAIeCc1/E199/55X/6hsV6DvlwPdh6i9TGnT9Iwik0+0W"}],"size":34012},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.1.0_1765566714716_0.017966324519071764"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-12T19:11:54.872Z","publish_time":1765566714872,"_source_registry_name":"default"},"15.1.1":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.1.1","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.2.0","@commitlint/config-conventional":"^20.2.0","@koa/bodyparser":"^6.0.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.7","@types/koa":"^3.0.1","@types/node":"^25.0.3","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.50.0","@typescript-eslint/parser":"^8.50.0","c8":"^10.1.3","chalk":"^5.4.1","eslint":"^9.39.2","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.7.4","rimraf":"^6.1.2","supertest":"^7.1.4","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.1.1","dist":{"shasum":"9b8a3f25529a0692fc2c733355502e41bd36cdb9","integrity":"sha512-trYxL4VOx8r92f8luqpN83xkN0DMTsp/HBJIxoDZH/a2I1Hxvoe+jjjhyJRQUQIHmsNQjCM+Xj6nCqSvnDnlCw==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.1.1.tgz","fileCount":9,"unpackedSize":173302,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCg1oY/YJ8gnDDx4jNIXfh/sRrwluvbSdRpZ06AMxAxHQIhAJ9Z3yUCzavMsSTrUBpZpkWGa6bJ7OgNjMTvJa4kBAgR"}],"size":33951},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.1.1_1766097224785_0.5875262960861378"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-18T22:33:44.931Z","publish_time":1766097224931,"_source_registry_name":"default"},"15.1.2":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.1.2","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.3.0","@commitlint/config-conventional":"^20.3.0","@koa/bodyparser":"^6.0.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.0.3","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.51.0","@typescript-eslint/parser":"^8.51.0","c8":"^10.1.3","chalk":"^5.6.2","eslint":"^9.39.2","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.7.4","rimraf":"^6.1.2","supertest":"^7.1.4","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.1.2","dist":{"shasum":"48a655b90ab495ee2ec8aead1e81c6e8d555c1ed","integrity":"sha512-qQasHXc+nk954YqQT4vJBMNzTkK825Sz50czLtvm3+Jm4tv32t2qVNTbzw3jwaJWAAtfiIknZrhHd2h+nIC1uA==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.1.2.tgz","fileCount":9,"unpackedSize":173864,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkOB/2LR2X1KSRFlvvW1idSzIneg7xqSn1Id8Kk0KZ5wIgORcl9ToJCM1252oOdWzYX73kRgntOv6FvngJUGBuwDI="}],"size":34034},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.1.2_1767485704128_0.8125521114431196"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-04T00:15:04.280Z","publish_time":1767485704280,"_source_registry_name":"default"},"15.2.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.2.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.3.0","@commitlint/config-conventional":"^20.3.0","@koa/bodyparser":"^6.0.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.0.3","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.51.0","@typescript-eslint/parser":"^8.51.0","c8":"^10.1.3","chalk":"^5.6.2","eslint":"^9.39.2","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.7.4","rimraf":"^6.1.2","supertest":"^7.1.4","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.2.0","dist":{"shasum":"506deb09654eccc25f204048882317c5cba262d2","integrity":"sha512-7YUhq4W83cybfNa4E7JqJpWzoCTSvbnFltkvRaUaUX1ybFzlUoLNY1SqT8XmIAO6nGbFrev+FvJHw4mL+4WhuQ==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.2.0.tgz","fileCount":9,"unpackedSize":181460,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDSbDJmaIP6v6+tNEoDJg75syfqkqRpQnrc+E/3wjS4NwIgJM+C1YGXG0R0lvWUJEZ+AoCFPS1V69LM7StNWXEQY0Y="}],"size":35722},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.2.0_1767491759338_0.8494337504980012"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-04T01:55:59.498Z","publish_time":1767491759498,"_source_registry_name":"default"},"15.3.0":{"name":"@koa/router","description":"Router middleware for koa. Maintained by Forward Email and Lad.","version":"15.3.0","author":{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"Alex Mingoia","email":"talk@alexmingoia.com"},{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.3.1","@commitlint/config-conventional":"^20.3.1","@koa/bodyparser":"^6.1.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.0.10","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.53.1","@typescript-eslint/parser":"^8.53.1","c8":"^10.1.3","chalk":"^5.6.2","eslint":"^9.39.2","eslint-plugin-unicorn":"^62.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.1","lint-staged":"^16.2.7","prettier":"^3.8.1","rimraf":"^6.1.2","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --ext .ts,.tsx --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.3.0","dist":{"shasum":"bb58f1f664ade3ac01cd0884391c0a11655b5291","integrity":"sha512-s87hWJjFYky2Z97u8jzah73sSHp4IZivD/2PZCuspHRvcKU69OPLoBIbKigVlBmS50yFTh9GHFfr1hDag4+wXw==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.3.0.tgz","fileCount":9,"unpackedSize":182629,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD3C0OvgBYT6gDj3nRYDO8mTL0YBqM+wtq8UFfAaX+K8AIgSjDNlLecBox7WmuRNSgd83XRhycp/u4QFtv3M1oFr0I="}],"size":35758},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.3.0_1769298366033_0.6962562475724716"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-24T23:46:06.169Z","publish_time":1769298366169,"_source_registry_name":"default"},"15.3.1":{"name":"@koa/router","description":"Router middleware for Koa.","version":"15.3.1","author":{"name":"Koa.js"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.4.2","@commitlint/config-conventional":"^20.4.2","@eslint/js":"^10.0.1","@koa/bodyparser":"^6.1.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.3.2","@types/supertest":"^7.2.0","@typescript-eslint/eslint-plugin":"^8.56.1","@typescript-eslint/parser":"^8.56.1","c8":"^11.0.0","chalk":"^5.6.2","eslint":"^10.0.2","eslint-plugin-unicorn":"^63.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.2","lint-staged":"^16.3.0","np":"^11.0.2","prettier":"^3.8.1","rimraf":"^6.1.3","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build","release":"np --test-script test:all"},"resolutions":{"c8/yargs":"^18.0.0"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.3.1","dist":{"shasum":"f1117b7aab77dfc51c186b9c9e0f7b30a39c8ad0","integrity":"sha512-n7UgxsPmgKtEsrguz8a0d6BNx3lO2x52Z4UqkGsGwJculk4TlzZf3btd3QZMq1r1M+bSxUkBbyul4mDhysIVaQ==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.3.1.tgz","fileCount":9,"unpackedSize":182610,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCyUAKhRKvJiwDJksq3rqY+aUNIjaQ0P1OYW9Il0IhpOwIgG4+qbuL+TuV19hR1fs3WFGKJZfNDCD0+x0lA9XKhKjs="}],"size":35752},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.3.1_1772293215303_0.28611701269514866"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-02-28T15:40:15.452Z","publish_time":1772293215452,"_source_registry_name":"default"},"15.3.2":{"name":"@koa/router","description":"Router middleware for Koa.","version":"15.3.2","author":{"name":"Koa.js"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.4.4","@commitlint/config-conventional":"^20.4.4","@eslint/js":"^10.0.1","@koa/bodyparser":"^6.1.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.5.0","@types/supertest":"^7.2.0","@typescript-eslint/eslint-plugin":"^8.57.0","@typescript-eslint/parser":"^8.57.0","c8":"^11.0.0","chalk":"^5.6.2","eslint":"^10.0.3","eslint-plugin-unicorn":"^63.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.2","lint-staged":"^16.4.0","np":"^11.0.2","prettier":"^3.8.1","rimraf":"^6.1.3","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build","release":"np --test-script test:all"},"resolutions":{"c8/yargs":"^18.0.0"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.3.2","dist":{"shasum":"828cd3cdb37796490deba9e4358447e059097287","integrity":"sha512-jjg3Y2lpNFPaZ3S9vDienNS3hxBzaCLCsT7u/DScCdc8S7bSTsfZwFTsGHiZ5vmjqskdvvc7PMoQn7UvzLNGFg==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.3.2.tgz","fileCount":9,"unpackedSize":182609,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFTFAzrYc4oqINeQEiyMl9HuKKPsWsqkOJTMfUxh7G/UAiBiI8QVKF/gX9HeZfSn8D/Om7gnkrEcLjXrM/PUF1irtQ=="}],"size":35763},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.3.2_1773537998597_0.6205083541826766"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-15T01:26:38.797Z","publish_time":1773537998797,"_source_registry_name":"default"},"15.4.0":{"name":"@koa/router","description":"Router middleware for Koa.","version":"15.4.0","author":{"name":"Koa.js"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.3.0"},"devDependencies":{"@commitlint/cli":"^20.4.4","@commitlint/config-conventional":"^20.4.4","@eslint/js":"^10.0.1","@koa/bodyparser":"^6.1.0","@types/debug":"^4.1.12","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.1","@types/node":"^25.5.0","@types/supertest":"^7.2.0","@typescript-eslint/eslint-plugin":"^8.57.0","@typescript-eslint/parser":"^8.57.0","c8":"^11.0.0","chalk":"^5.6.2","eslint":"^10.0.3","eslint-plugin-unicorn":"^63.0.0","husky":"^9.1.7","joi":"^18.0.2","jsonwebtoken":"^9.0.3","koa":"^3.1.2","lint-staged":"^16.4.0","np":"^11.0.2","prettier":"^3.8.1","rimraf":"^6.1.3","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build","release":"np --test-script test:all"},"resolutions":{"c8/yargs":"^18.0.0"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.4.0","dist":{"shasum":"8c5064919c14acd6a0283e53c3b7ff63bc401c79","integrity":"sha512-vKYlXtoCfcAN8z4dHiveYX55rTYOgHEYJNumK1WM9ZAwaArhreGVkyC1LTMGfUQUJyIO/SbwRFBOHeOCY8/MaQ==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.4.0.tgz","fileCount":9,"unpackedSize":202365,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC1WjZWZVDfjUmBVGBEggTJ0c6EUut2yy2LiqB5a34MuwIhANtZkxMVml9GheM3Fwr6JNPH3wuF8rYBiC6VX75ciYpA"}],"size":46184},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.4.0_1773625850459_0.018518709762078256"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-16T01:50:50.702Z","publish_time":1773625850702,"_source_registry_name":"default"},"15.5.0":{"name":"@koa/router","description":"Router middleware for Koa.","version":"15.5.0","author":{"name":"Koa.js"},"bugs":{"url":"https://github.com/koajs/router/issues","email":"niftylettuce@gmail.com"},"contributors":[{"name":"@koajs"},{"name":"Imed Jaberi","email":"imed-jaberi@outlook.com"}],"peerDependencies":{"koa":"^2.0.0 || ^3.0.0"},"peerDependenciesMeta":{"koa":{"optional":false}},"dependencies":{"debug":"^4.4.3","http-errors":"^2.0.1","koa-compose":"^4.1.0","path-to-regexp":"^8.4.2"},"devDependencies":{"@commitlint/cli":"^20.5.3","@commitlint/config-conventional":"^20.5.3","@eslint/js":"^10.0.1","@koa/bodyparser":"^6.1.0","@types/debug":"^4.1.13","@types/jsonwebtoken":"^9.0.10","@types/koa":"^3.0.2","@types/node":"^25.6.0","@types/supertest":"^7.2.0","@typescript-eslint/eslint-plugin":"^8.59.1","@typescript-eslint/parser":"^8.59.1","c8":"^11.0.0","chalk":"^5.6.2","eslint":"^10.3.0","eslint-plugin-unicorn":"^64.0.0","husky":"^9.1.7","joi":"^18.1.2","jsonwebtoken":"^9.0.3","koa":"^3.2.0","lint-staged":"^16.4.0","np":"^11.2.0","prettier":"^3.8.3","rimraf":"^6.1.3","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3"},"engines":{"node":">= 20"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","require":"./dist/index.js"}}},"homepage":"https://github.com/koajs/router","keywords":["koa","middleware","route","router"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/koajs/router.git"},"scripts":{"bench":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/run.ts","benchmark":"npm run bench","bench:all":"TS_NODE_PROJECT=tsconfig.bench.json node --require ts-node/register bench/make.ts","benchmark:all":"npm run bench:all","prepare":"husky install","format":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"","lint:ts":"eslint src test --fix","lint":"npm run lint:ts","test:core":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts","test:recipes":"TS_NODE_PROJECT=tsconfig.recipes.json node --require ts-node/register --test recipes/**/*.test.ts","pretest:all":"npm run lint && npm run build","test:all":"TS_NODE_PROJECT=tsconfig.ts-node.json node --require ts-node/register --test test/*.test.ts test/**/*.test.ts recipes/**/*.test.ts","test:coverage":"c8 --all --exclude eslint.config.js --exclude tsup.config.ts --exclude src/types.ts --exclude \"bench/**\" --exclude \"dist/**\" --exclude \"recipes/**\" --exclude \"test/**\" --exclude-after-remap npm run test:all","ts:check":"tsc --noEmit --project tsconfig.typecheck.json","ts:check:test":"tsc --noEmit --project tsconfig.test.json","prebuild":"rimraf dist","build":"tsup","prepublishOnly":"npm run build","release":"np --test-script test:all"},"resolutions":{"c8/yargs":"^18.0.0"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015 @koajs maintainers and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"@koa/router@15.5.0","dist":{"shasum":"a3ba43d324145d701984dac97f28f31af918f132","integrity":"sha512-KSC0oG/5t6ITu5wqX4lJseA/dngoj14hEaohrLZEXtlUT2RRyJvwaJ0KV+5uQoaWrY3A8ClHOrBEU4g8dujn8Q==","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@koa/router/-/router-15.5.0.tgz","fileCount":9,"unpackedSize":205635,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDK8uyqcXJ/GiCaiZqGrEMimT5/fZ4HEhKDQTadNOA70wIgE/O7r0Fa2fKWJ+uKNsoKSYQXJHxstEbqbC0cjfy3HrI="}],"size":47012},"_npmUser":{"name":"anonymous","email":"imed_jebari@hotmail.fr"},"directories":{},"maintainers":[{"name":"anonymous","email":"niftylettuce@gmail.com"},{"name":"anonymous","email":"fengmk2@gmail.com"},{"name":"anonymous","email":"dead_horse@qq.com"},{"name":"anonymous","email":"jonathanrichardong@gmail.com"},{"name":"anonymous","email":"julian@juliangruber.com"},{"name":"anonymous","email":"aaron.heckmann+github@gmail.com"},{"name":"anonymous","email":"npm@titanism.com"},{"name":"anonymous","email":"imed_jebari@hotmail.fr"},{"name":"anonymous","email":"ljharb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_15.5.0_1777740692294_0.7482602998131709"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-05-02T16:51:32.452Z","publish_time":1777740692452,"_source_registry_name":"default"}},"dist-tags":{"latest":"15.5.0"},"name":"@koa/router","time":{"modified":"2026-05-02T16:51:43.220Z","created":"2022-01-26T22:35:26.705Z","10.0.0":"2020-11-02T13:56:35.885Z","9.4.0":"2020-08-14T01:42:11.936Z","9.3.1":"2020-07-05T08:37:14.250Z","9.3.0":"2020-07-05T08:33:36.388Z","9.2.0":"2020-07-05T02:44:03.930Z","9.1.0":"2020-06-30T17:00:38.850Z","9.0.1":"2020-05-30T08:08:27.216Z","8.0.8":"2020-02-09T10:34:05.824Z","8.0.7":"2020-02-06T07:13:36.009Z","8.0.6":"2020-01-22T21:15:19.781Z","8.0.5":"2019-12-10T18:22:52.155Z","8.0.3":"2019-12-09T18:04:47.892Z","8.0.2":"2019-10-10T15:59:33.001Z","8.0.1":"2019-09-03T00:41:24.074Z","8.0.0":"2019-06-16T15:03:53.524Z","10.1.1":"2021-08-22T16:03:03.875Z","10.1.0":"2021-07-20T20:25:41.040Z","11.0.0":"2022-07-04T07:11:44.408Z","11.0.1":"2022-07-04T08:52:17.320Z","12.0.0":"2022-07-19T00:44:19.428Z","8.0.4":"2019-12-10T15:56:35.868Z","9.0.0":"2020-04-09T00:23:51.864Z","12.0.1":"2023-10-12T20:27:54.943Z","11.0.2":"2023-10-12T20:37:37.993Z","13.0.0":"2024-08-15T14:54:35.432Z","13.0.1":"2024-09-13T18:42:41.841Z","12.0.2":"2024-09-17T23:34:03.192Z","13.1.0":"2024-09-18T00:09:37.140Z","13.1.1":"2025-07-01T17:16:21.906Z","14.0.0":"2025-08-02T17:18:47.424Z","15.0.0":"2025-12-02T20:39:13.037Z","15.1.0":"2025-12-12T19:11:54.872Z","15.1.1":"2025-12-18T22:33:44.931Z","15.1.2":"2026-01-04T00:15:04.280Z","15.2.0":"2026-01-04T01:55:59.498Z","15.3.0":"2026-01-24T23:46:06.169Z","15.3.1":"2026-02-28T15:40:15.452Z","15.3.2":"2026-03-15T01:26:38.797Z","15.4.0":"2026-03-16T01:50:50.702Z","15.5.0":"2026-05-02T16:51:32.452Z"},"readme":"# [@koa/router](https://github.com/koajs/router)\n\n> Modern TypeScript Router middleware for [Koa](https://github.com/koajs/koa). Maintained by [Forward Email][forward-email] and [Lad][].\n\n[![build status](https://github.com/koajs/router/actions/workflows/ci.yml/badge.svg)](https://github.com/koajs/router/actions/workflows/ci.yml)\n[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org)\n[![license](https://img.shields.io/github/license/koajs/router.svg)](LICENSE)\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [TypeScript Support](#typescript-support)\n- [Quick Start](#quick-start)\n- [API Documentation](#api-documentation)\n- [Advanced Features](#advanced-features)\n- [Best Practices](#best-practices)\n- [Recipes](#recipes)\n- [Performance](#performance)\n- [Testing](#testing)\n- [Migration Guides](#migration-guides)\n- [Contributing](#contributing)\n- [License](#license)\n- [Contributors](#contributors)\n\n## Features\n\n- ✅ **Full TypeScript Support** - Written in TypeScript with comprehensive type definitions\n- ✅ **Express-Style Routing** - Familiar `app.get`, `app.post`, `app.put`, etc.\n- ✅ **Named URL Parameters** - Extract parameters from URLs\n- ✅ **Named Routes** - Generate URLs from route names\n- ✅ **Host Matching** - Match routes based on hostname\n- ✅ **HEAD Request Support** - Automatic HEAD support for GET routes\n- ✅ **Multiple Middleware** - Chain multiple middleware functions\n- ✅ **Nested Routers** - Mount routers within routers\n- ✅ **RegExp Paths** - Use regular expressions for flexible path matching\n- ✅ **Parameter Middleware** - Run middleware for specific URL parameters\n- ✅ **Path-to-RegExp v8** - Modern, predictable path matching\n- ✅ **405 Method Not Allowed** - Automatic method validation\n- ✅ **501 Not Implemented** - Proper HTTP status codes\n- ✅ **Async/Await** - Full promise-based middleware support\n\n## Installation\n\n**npm:**\n\n```bash\nnpm install @koa/router\n```\n\n**yarn:**\n\n```bash\nyarn add @koa/router\n```\n\n**Requirements:**\n\n- Node.js >= 20 (tested on v20, v22, v24, v25)\n- Koa >= 2.0.0\n\n## TypeScript Support\n\n@koa/router is written in TypeScript and includes comprehensive type definitions out of the box. No need for `@types/*` packages!\n\n### Basic Usage\n\nTypes are **automatically inferred** - no explicit type annotations needed:\n\n```typescript\nimport Router from '@koa/router';\n\nconst router = new Router();\n\n// ctx and next are automatically inferred!\nrouter.get('/:id', (ctx, next) => {\n  const id = ctx.params.id; // ✅ Inferred as string\n  ctx.request.params.id; // ✅ Also available\n  ctx.body = { id }; // ✅ Works\n  return next(); // ✅ Works\n});\n\n// Also works for router.use()\nrouter.use((ctx, next) => {\n  ctx.state.startTime = Date.now();\n  return next();\n});\n```\n\n### Explicit Types (Optional)\n\nFor cases where you need explicit types:\n\n```typescript\nimport Router, { RouterContext } from '@koa/router';\nimport type { Next } from 'koa';\n\nrouter.get('/:id', (ctx: RouterContext, next: Next) => {\n  const id = ctx.params.id;\n  ctx.body = { id };\n});\n```\n\n### Generic Types\n\nThe router supports generic type parameters for full type safety with custom state and context types:\n\n```typescript\nimport Router, { RouterContext } from '@koa/router';\nimport type { Next } from 'koa';\n\n// Define your application state\ninterface AppState {\n  user?: {\n    id: string;\n    email: string;\n  };\n}\n\n// Define your custom context\ninterface AppContext {\n  requestId: string;\n}\n\n// Create router with generics\nconst router = new Router<AppState, AppContext>();\n\n// Type-safe route handlers\nrouter.get(\n  '/profile',\n  (ctx: RouterContext<AppState, AppContext>, next: Next) => {\n    // ctx.state.user is fully typed\n    if (ctx.state.user) {\n      ctx.body = {\n        user: ctx.state.user,\n        requestId: ctx.requestId // Custom context property\n      };\n    }\n  }\n);\n```\n\n### Extending Types in Route Handlers\n\nHTTP methods support generic type parameters to extend state and context types:\n\n```typescript\ninterface UserState {\n  user: { id: string; name: string };\n}\n\ninterface UserContext {\n  permissions: string[];\n}\n\n// Extend types for specific routes\nrouter.get<UserState, UserContext>(\n  '/users/:id',\n  async (ctx: RouterContext<UserState, UserContext>) => {\n    // ctx.state.user is fully typed\n    // ctx.permissions is fully typed\n    ctx.body = {\n      user: ctx.state.user,\n      permissions: ctx.permissions\n    };\n  }\n);\n```\n\n### Parameter Middleware Types\n\n```typescript\nimport type { RouterParameterMiddleware } from '@koa/router';\nimport type { Next } from 'koa';\n\n// Type-safe parameter middleware\nrouter.param('id', ((value: string, ctx: RouterContext, next: Next) => {\n  if (!/^\\d+$/.test(value)) {\n    ctx.throw(400, 'Invalid ID format');\n  }\n  return next();\n}) as RouterParameterMiddleware);\n```\n\n### Available Types\n\n```typescript\nimport {\n  Router,\n  RouterContext,\n  RouterOptions,\n  RouterMiddleware,\n  RouterParameterMiddleware,\n  AllowedMethodsOptions,\n  UrlOptions,\n  HttpMethod,\n  MatchResult,\n  LayerOptions,\n  Layer,\n  RouterEvent,\n  RouterEventSelector,\n  RouterEvents\n} from '@koa/router';\nimport type { Next } from 'koa';\n\n// Router with generics\ntype MyRouter = Router<AppState, AppContext>;\n\n// Context with generics\ntype MyContext = RouterContext<AppState, AppContext, BodyType>;\n\n// Middleware with generics\ntype MyMiddleware = RouterMiddleware<AppState, AppContext, BodyType>;\n\n// Parameter middleware with generics\ntype MyParamMiddleware = RouterParameterMiddleware<\n  AppState,\n  AppContext,\n  BodyType\n>;\n```\n\n### Type Safety Features\n\n- ✅ **Full type inference** - `ctx` and `next` are inferred automatically in route handlers\n- ✅ **Full generic support** - `Router<StateT, ContextT>` for custom state and context types\n- ✅ **Type-safe parameters** - `ctx.params` is fully typed and always defined\n- ✅ **Type-safe state** - `ctx.state` respects your state type\n- ✅ **Type-safe middleware** - Middleware functions are fully typed\n- ✅ **Type-safe HTTP methods** - Methods support generic type extensions\n- ✅ **Custom HTTP method inference** - Use `as const` with `methods` option for typed custom methods\n- ✅ **Compatible with @types/koa-router** - Matches official type structure\n\n## Quick Start\n\n```javascript\nimport Koa from 'koa';\nimport Router from '@koa/router';\n\nconst app = new Koa();\nconst router = new Router();\n\n// Define routes\nrouter.get('/', (ctx, next) => {\n  ctx.body = 'Hello World!';\n});\n\nrouter.get('/users/:id', (ctx, next) => {\n  ctx.body = { id: ctx.params.id };\n});\n\n// Apply router middleware\napp.use(router.routes()).use(router.allowedMethods());\n\napp.listen(3000);\n```\n\n## API Documentation\n\n### Router Constructor\n\n**`new Router([options])`**\n\nCreate a new router instance.\n\n**Options:**\n\n| Option      | Type                           | Description                                                                                                                                                                    |\n| ----------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `prefix`    | `string`                       | Prefix all routes with this path                                                                                                                                               |\n| `exclusive` | `boolean \\| 'specificity'`     | `true`: only run the last-registered matching route. `'specificity'`: only run the route with the fewest path parameters (OpenAPI-compliant). Omit to run all matching routes. |\n| `host`      | `string \\| string[] \\| RegExp` | Match routes only for this hostname(s)                                                                                                                                         |\n| `methods`   | `string[]`                     | Custom HTTP methods to support                                                                                                                                                 |\n| `sensitive` | `boolean`                      | Enable case-sensitive routing                                                                                                                                                  |\n| `strict`    | `boolean`                      | Require trailing slashes                                                                                                                                                       |\n\n**Example:**\n\n```javascript\nconst router = new Router({\n  prefix: '/api',\n  exclusive: true,\n  host: 'example.com'\n});\n```\n\n### HTTP Methods\n\nRouter provides methods for all standard HTTP verbs:\n\n- `router.get(path, ...middleware)`\n- `router.post(path, ...middleware)`\n- `router.put(path, ...middleware)`\n- `router.patch(path, ...middleware)`\n- `router.delete(path, ...middleware)` or `router.del(path, ...middleware)`\n- `router.head(path, ...middleware)`\n- `router.options(path, ...middleware)`\n- `router.connect(path, ...middleware)` - CONNECT method\n- `router.trace(path, ...middleware)` - TRACE method\n- `router.all(path, ...middleware)` - Match any HTTP method\n\n**Note:** All standard HTTP methods (as defined by Node.js `http.METHODS`) are automatically available as router methods. The `methods` option in the constructor can be used to limit which methods the router responds to, but you cannot use truly custom HTTP methods beyond the standard set.\n\n**Basic Example:**\n\n```javascript\nrouter\n  .get('/users', getUsers)\n  .post('/users', createUser)\n  .put('/users/:id', updateUser)\n  .delete('/users/:id', deleteUser)\n  .all('/users/:id', logAccess); // Runs for any method\n```\n\n**Using Less Common HTTP Methods:**\n\nAll standard HTTP methods from Node.js are automatically available. Here's an example using `PATCH` and `PURGE`:\n\n```javascript\nconst router = new Router();\n\n// PATCH method (standard HTTP method for partial updates)\nrouter.patch('/users/:id', async (ctx) => {\n  // Partial update\n  ctx.body = { message: 'User partially updated' };\n});\n\n// PURGE method (standard HTTP method, commonly used for cache invalidation)\nrouter.purge('/cache/:key', async (ctx) => {\n  // Clear cache\n  await clearCache(ctx.params.key);\n  ctx.body = { message: 'Cache cleared' };\n});\n\n// COPY method (standard HTTP method)\nrouter.copy('/files/:source', async (ctx) => {\n  await copyFile(ctx.params.source, ctx.request.body.destination);\n  ctx.body = { message: 'File copied' };\n});\n\n// Limiting which methods the router responds to\nconst apiRouter = new Router({\n  methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] // Only these methods\n});\n\napiRouter.get('/users', getUsers);\napiRouter.post('/users', createUser);\n// router.purge() won't work here because PURGE is not in the methods array\n```\n\n**Note:** HEAD requests are automatically supported for all GET routes. When you define a GET route, HEAD requests will execute the same handler and return the same headers but with an empty body.\n\n### Named Routes\n\nRoutes can be named for URL generation:\n\n```javascript\nrouter.get('user', '/users/:id', (ctx) => {\n  ctx.body = { id: ctx.params.id };\n});\n\n// Generate URL\nrouter.url('user', 3);\n// => \"/users/3\"\n\nrouter.url('user', { id: 3 });\n// => \"/users/3\"\n\n// With query parameters\nrouter.url('user', { id: 3 }, { query: { limit: 10 } });\n// => \"/users/3?limit=10\"\n\n// In middleware\nrouter.use((ctx, next) => {\n  ctx.redirect(ctx.router.url('user', 1));\n});\n```\n\n### Multiple Middleware\n\nChain multiple middleware functions for a single route:\n\n```javascript\nrouter.get(\n  '/users/:id',\n  async (ctx, next) => {\n    // Load user from database\n    ctx.state.user = await User.findById(ctx.params.id);\n    return next();\n  },\n  async (ctx, next) => {\n    // Check permissions\n    if (!ctx.state.user) {\n      ctx.throw(404, 'User not found');\n    }\n    return next();\n  },\n  (ctx) => {\n    // Send response\n    ctx.body = ctx.state.user;\n  }\n);\n```\n\n### Nested Routers\n\nMount routers within routers:\n\n```javascript\nconst usersRouter = new Router();\nusersRouter.get('/', getUsers);\nusersRouter.get('/:id', getUser);\n\nconst postsRouter = new Router();\npostsRouter.get('/', getPosts);\npostsRouter.get('/:id', getPost);\n\nconst apiRouter = new Router({ prefix: '/api' });\napiRouter.use('/users', usersRouter.routes());\napiRouter.use('/posts', postsRouter.routes());\n\napp.use(apiRouter.routes());\n```\n\n**Note:** Parameters from parent routes are properly propagated to nested router middleware and handlers.\n\n### Router Prefixes\n\nSet a prefix for all routes in a router:\n\n**Option 1: In constructor**\n\n```javascript\nconst router = new Router({ prefix: '/api' });\nrouter.get('/users', handler); // Responds to /api/users\n```\n\n**Option 2: Using .prefix()**\n\n```javascript\nconst router = new Router();\nrouter.prefix('/api');\nrouter.get('/users', handler); // Responds to /api/users\n```\n\n**With parameters:**\n\n```javascript\nconst router = new Router({ prefix: '/api/v:version' });\nrouter.get('/users', (ctx) => {\n  ctx.body = {\n    version: ctx.params.version,\n    users: []\n  };\n});\n// Responds to /api/v1/users, /api/v2/users, etc.\n```\n\n**Note:** Middleware now correctly executes when the prefix contains parameters.\n\n### URL Parameters\n\nNamed parameters are captured and available at `ctx.params`:\n\n```javascript\nrouter.get('/:category/:title', (ctx) => {\n  console.log(ctx.params);\n  // => { category: 'programming', title: 'how-to-node' }\n\n  ctx.body = {\n    category: ctx.params.category,\n    title: ctx.params.title\n  };\n});\n```\n\n**Optional parameters:**\n\n```javascript\nrouter.get('/user{/:id}', (ctx) => {\n  // Matches both /user and /user/123\n  ctx.body = { id: ctx.params.id || 'all' };\n});\n```\n\n**Wildcard parameters:**\n\n```javascript\nrouter.get('/files/{/*path}', (ctx) => {\n  // Matches /files/a/b/c.txt\n  ctx.body = { path: ctx.params.path }; // => a/b/c.txt\n});\n```\n\n**Note:** Custom regex patterns in parameters (`:param(regex)`) are **no longer supported** in v14+ due to path-to-regexp v8. Use validation in handlers or middleware instead.\n\n**Helper for parameter validation (v14+)** <small>(Added on v15.2)</small>\n\nIf you want to keep regex-style validation, register a param middleware instead:\n\n```javascript\nimport Router, { createParameterValidationMiddleware } from '@koa/router';\n\nconst uuid =\n  /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\nconst validateId = createParameterValidationMiddleware('id', uuid);\n\nrouter.param('id', validateId).get('/role/:id', middleware);\n```\n\nOr validate inline on a specific route:\n\n```javascript\nimport Router, { createParameterValidationMiddleware } from '@koa/router';\n\nconst uuid =\n  /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\nrouter.get(\n  '/role/:id',\n  createParameterValidationMiddleware('id', uuid),\n  middleware\n);\n```\n\n### router.routes()\n\nReturns router middleware which dispatches matched routes.\n\n```javascript\napp.use(router.routes());\n```\n\n### router.use()\n\nUse middleware, **if and only if**, a route is matched.\n\n**Signature:**\n\n```javascript\nrouter.use([path], ...middleware);\n```\n\n**Examples:**\n\n```javascript\n// Run for all matched routes\nrouter.use(session());\n\n// Run only for specific path\nrouter.use('/admin', requireAuth());\n\n// Run for multiple paths\nrouter.use(['/admin', '/dashboard'], requireAuth());\n\n// Run for RegExp paths\nrouter.use(/^\\/api\\//, apiAuth());\n\n// Mount nested routers\nconst nestedRouter = new Router();\nrouter.use('/nested', nestedRouter.routes());\n```\n\n**Note:** Middleware path boundaries are correctly enforced. Middleware scoped to `/api` will only run for routes matching `/api/*`, not for unrelated routes.\n\n### router.prefix()\n\nSet the path prefix for a Router instance after initialization.\n\n```javascript\nconst router = new Router();\nrouter.get('/', handler); // Responds to /\n\nrouter.prefix('/api');\nrouter.get('/', handler); // Now responds to /api\n```\n\n### router.allowedMethods()\n\nReturns middleware for responding to `OPTIONS` requests with allowed methods,\nand `405 Method Not Allowed` / `501 Not Implemented` responses.\n\n**Options:**\n\n| Option             | Type       | Description                              |\n| ------------------ | ---------- | ---------------------------------------- |\n| `throw`            | `boolean`  | Throw errors instead of setting response |\n| `notImplemented`   | `function` | Custom function for 501 errors           |\n| `methodNotAllowed` | `function` | Custom function for 405 errors           |\n\n**Example:**\n\n```javascript\napp.use(router.routes());\napp.use(router.allowedMethods());\n```\n\n**With custom error handling:**\n\n```javascript\napp.use(\n  router.allowedMethods({\n    throw: true,\n    notImplemented: () => new Error('Not Implemented'),\n    methodNotAllowed: () => new Error('Method Not Allowed')\n  })\n);\n```\n\n### router.redirect()\n\nRedirect `source` to `destination` URL with optional status code.\n\n```javascript\nrouter.redirect('/login', 'sign-in', 301);\nrouter.redirect('/old-path', '/new-path');\n\n// Redirect to named route\nrouter.get('home', '/', handler);\nrouter.redirect('/index', 'home');\n```\n\n### router.route()\n\nLookup a route by name.\n\n```javascript\nconst layer = router.route('user');\nif (layer) {\n  console.log(layer.path); // => /users/:id\n}\n```\n\n### router.url()\n\nGenerate URL from route name and parameters.\n\n```javascript\nrouter.get('user', '/users/:id', handler);\n\nrouter.url('user', 3);\n// => \"/users/3\"\n\nrouter.url('user', { id: 3 });\n// => \"/users/3\"\n\nrouter.url('user', { id: 3 }, { query: { limit: 1 } });\n// => \"/users/3?limit=1\"\n\nrouter.url('user', { id: 3 }, { query: 'limit=1' });\n// => \"/users/3?limit=1\"\n```\n\n**In middleware:**\n\n```javascript\nrouter.use((ctx, next) => {\n  // Access router instance via ctx.router\n  const userUrl = ctx.router.url('user', ctx.state.userId);\n  ctx.redirect(userUrl);\n  return next();\n});\n```\n\n### router.param()\n\nRun middleware for named route parameters.\n\n**Signature:**\n\n```typescript\nrouter.param(param: string, middleware: RouterParameterMiddleware): Router\n```\n\n**TypeScript Example:**\n\n```typescript\nimport type { RouterParameterMiddleware } from '@koa/router';\nimport type { Next } from 'koa';\n\nrouter.param('user', (async (id: string, ctx: RouterContext, next: Next) => {\n  ctx.state.user = await User.findById(id);\n  if (!ctx.state.user) {\n    ctx.throw(404, 'User not found');\n  }\n  return next();\n}) as RouterParameterMiddleware);\n\nrouter.get('/users/:user', (ctx: RouterContext) => {\n  // ctx.state.user is already loaded and typed\n  ctx.body = ctx.state.user;\n});\n\nrouter.get('/users/:user/friends', (ctx: RouterContext) => {\n  // ctx.state.user is available here too\n  return ctx.state.user.getFriends();\n});\n```\n\n**JavaScript Example:**\n\n```javascript\nrouter\n  .param('user', async (id, ctx, next) => {\n    ctx.state.user = await User.findById(id);\n    if (!ctx.state.user) {\n      ctx.throw(404, 'User not found');\n    }\n    return next();\n  })\n  .get('/users/:user', (ctx) => {\n    // ctx.state.user is already loaded\n    ctx.body = ctx.state.user;\n  })\n  .get('/users/:user/friends', (ctx) => {\n    // ctx.state.user is available here too\n    return ctx.state.user.getFriends();\n  });\n```\n\n**Multiple param handlers:**\n\nYou can register multiple param handlers for the same parameter. All handlers will be called in order, and each handler is executed exactly once per request (even if multiple routes match):\n\n```javascript\nrouter\n  .param('id', validateIdFormat)\n  .param('id', checkIdExists)\n  .param('id', checkPermissions)\n  .get('/resource/:id', handler);\n// All three param handlers run once per request\n```\n\n### Router.url() (static)\n\nGenerate URL from path pattern and parameters (static method).\n\n```javascript\nconst url = Router.url('/users/:id', { id: 1 });\n// => \"/users/1\"\n\nconst url = Router.url('/users/:id', { id: 1, name: 'John' });\n// => \"/users/1\"\n```\n\n### router.on() (experimental)\n\nRegister an event handler on the router for lifecycle events.\n\n**Signature:**\n\n```typescript\nrouter.on(event: RouterEventSelector, handler: RouterMiddleware): Router\n```\n\n**Parameters:**\n\n| Parameter | Type                  | Description                                                      |\n| --------- | --------------------- | ---------------------------------------------------------------- |\n| `event`   | `RouterEventSelector` | Event name string, `RouterEvents` constant, or selector function |\n| `handler` | `RouterMiddleware`    | Middleware function `(ctx, next) => {}`                          |\n\n**Returns:** Router instance for chaining.\n\n**Active events:**\n\n| Event         | Constant                | Description                               |\n| ------------- | ----------------------- | ----------------------------------------- |\n| `'not-found'` | `RouterEvents.NotFound` | Fires when no route matched path + method |\n\n**Example:**\n\n```javascript\nimport { RouterEvents } from '@koa/router';\n\n// All three forms are equivalent:\nrouter.on(RouterEvents.NotFound, handler); // constant (recommended)\nrouter.on((events) => events.NotFound, handler); // selector function\nrouter.on('not-found', handler); // raw string\n\n// Handlers can be chained:\nrouter\n  .on(RouterEvents.NotFound, async (ctx, next) => {\n    console.log('no route matched:', ctx.path);\n    await next();\n  })\n  .on(RouterEvents.NotFound, (ctx) => {\n    ctx.status = 404;\n    ctx.body = { error: 'Not Found' };\n  });\n```\n\n> **Note:** This API is experimental and may change in future versions. See the\n> [Not Found Event](#not-found-event-experimental) section in Advanced Features for details.\n\n## Advanced Features\n\n### Host Matching\n\nMatch routes only for specific hostnames:\n\n```javascript\n// Exact match with single host\nconst routerA = new Router({\n  host: 'example.com'\n});\n\n// Match multiple hosts with array\nconst routerB = new Router({\n  host: ['some-domain.com', 'www.some-domain.com', 'some.other-domain.com']\n});\n\n// Match patterns with RegExp\nconst routerC = new Router({\n  host: /^(.*\\.)?example\\.com$/ // Match all subdomains\n});\n```\n\n**Host Matching Options:**\n\n- `string` - Exact match (case-sensitive)\n- `string[]` - Matches if the request host equals any string in the array\n- `RegExp` - Pattern match using regular expression\n- `undefined` - Matches all hosts (default)\n\n### Regular Expressions\n\nUse RegExp for flexible path matching:\n\n**Full RegExp routes:**\n\n```javascript\nrouter.get(/^\\/users\\/(\\d+)$/, (ctx) => {\n  const id = ctx.params[0]; // First capture group\n  ctx.body = { id };\n});\n```\n\n**RegExp in router.use():**\n\n```javascript\nrouter.use(/^\\/api\\//, apiMiddleware);\nrouter.use(/^\\/admin\\//, adminAuth);\n```\n\n### Parameter Validation\n\nValidate parameters using middleware or handlers:\n\n**Option 1: In Handler**\n\n```javascript\nrouter.get('/user/:id', (ctx) => {\n  if (!/^\\d+$/.test(ctx.params.id)) {\n    ctx.throw(400, 'Invalid ID format');\n  }\n\n  ctx.body = { id: parseInt(ctx.params.id, 10) };\n});\n```\n\n**Option 2: Middleware**\n\n```javascript\nfunction validateUUID(paramName) {\n  const uuidRegex =\n    /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\n  return async (ctx, next) => {\n    if (!uuidRegex.test(ctx.params[paramName])) {\n      ctx.throw(400, `Invalid ${paramName} format`);\n    }\n    await next();\n  };\n}\n\nrouter.get('/user/:id', validateUUID('id'), handler);\n```\n\n**Option 3: router.param()**\n\n```javascript\nrouter.param('id', (value, ctx, next) => {\n  if (!/^\\d+$/.test(value)) {\n    ctx.throw(400, 'Invalid ID');\n  }\n  ctx.params.id = parseInt(value, 10); // Convert to number\n  return next();\n});\n\nrouter.get('/user/:id', handler);\nrouter.get('/post/:id', handler);\n// Both routes validate :id parameter\n```\n\n### Catch-All Routes\n\nCreate a catch-all route that runs when no specific route handler has set a response.\nCheck `!ctx.body` to determine whether a previous handler already responded:\n\n```javascript\nrouter.get('/users', handler1);\nrouter.get('/posts', handler2);\n\n// Catch-all for unmatched routes\nrouter.all('{/*rest}', (ctx) => {\n  if (!ctx.body) {\n    ctx.status = 404;\n    ctx.body = { error: 'Not Found' };\n  }\n});\n```\n\n> **Note:** `ctx.matched.length === 0` will never be true inside a catch-all handler.\n> The router populates `ctx.matched` **before** the handler body runs, so the catch-all\n> layer (`{/*rest}`) is already included in the array by the time your code executes.\n>\n> **Recommended:** Use `!ctx.body` as shown above — it is the simplest and most reliable\n> condition inside a catch-all route.\n>\n> **Workaround:** If you specifically need `ctx.matched`-based logic inside a catch-all,\n> filter out the catch-all layer first and check the remaining array:\n>\n> ```javascript\n> router.all('{/*rest}', (ctx) => {\n>   const realMatches = ctx.matched.filter(\n>     (layer) => layer.path !== '{/*rest}'\n>   );\n>   if (realMatches.length === 0) {\n>     ctx.status = 404;\n>     ctx.body = { error: 'Not Found' };\n>   }\n> });\n> ```\n>\n> For cleaner and more precise 404 detection, prefer app-level middleware with\n> `ctx.routeMatched` — see the [404 Handling](#404-handling) section.\n\n### Array of Paths\n\nRegister multiple paths with the same middleware:\n\n```javascript\nrouter.get(['/users', '/people'], handler);\n// Responds to both /users and /people\n```\n\n### 404 Handling\n\nImplement custom 404 handling using app-level middleware after the router.\n\n**Using `ctx.routeMatched` (recommended):**\n\n```javascript\napp.use(router.routes());\n\n// ctx.routeMatched is set by the router before handlers run\napp.use((ctx) => {\n  if (!ctx.routeMatched) {\n    ctx.status = 404;\n    ctx.body = {\n      error: 'Not Found',\n      path: ctx.path\n    };\n  }\n});\n```\n\n**Using `ctx.matched`:**\n\n```javascript\napp.use(router.routes());\n\napp.use((ctx) => {\n  if (!ctx.matched || ctx.matched.length === 0) {\n    ctx.status = 404;\n    ctx.body = {\n      error: 'Not Found',\n      path: ctx.path\n    };\n  }\n});\n```\n\n> For a router-scoped alternative that doesn't require app-level middleware,\n> see the [Not Found Event](#not-found-event-experimental) section below.\n\n### Not Found Event (Experimental)\n\n> **Note:** This API is experimental and may change in future versions.\n\nUse `router.on()` for a clean, dedicated 404 handler that runs only when no route\nmatched — without needing a catch-all route. Three equivalent forms are supported:\n\n```javascript\nimport { RouterEvents } from '@koa/router';\n\n// Named constant (recommended — autocomplete + refactor safe)\nrouter.on(RouterEvents.NotFound, handler);\n\n// Selector function (fluent style)\nrouter.on((events) => events.NotFound, handler);\n\n// Raw string (still accepted)\nrouter.on('not-found', handler);\n```\n\nFull example:\n\n```javascript\nimport { RouterEvents } from '@koa/router';\n\nrouter.get('/users', handler1);\nrouter.get('/posts', handler2);\n\nrouter.on(RouterEvents.NotFound, (ctx) => {\n  ctx.status = 404;\n  ctx.body = {\n    error: 'Not Found',\n    path: ctx.path,\n    method: ctx.method\n  };\n});\n\napp.use(router.routes());\n```\n\nMultiple handlers are supported and compose in registration order:\n\n```javascript\nrouter.on(RouterEvents.NotFound, async (ctx, next) => {\n  console.log('no route matched:', ctx.path);\n  await next();\n});\n\nrouter.on(RouterEvents.NotFound, (ctx) => {\n  ctx.status = 404;\n  ctx.body = { error: 'Not Found' };\n});\n```\n\nBenefits over catch-all routes:\n\n- Does not appear in `ctx.matched`\n- Only fires when no route matched — no need to check `ctx.routeMatched` or `ctx.body`\n- Handlers compose naturally with `next()`\n\n## Best Practices\n\n### 1. Use Middleware Composition\n\n```javascript\n// ✅ Good: Compose reusable middleware\nconst requireAuth = () => async (ctx, next) => {\n  if (!ctx.state.user) ctx.throw(401);\n  await next();\n};\n\nconst requireAdmin = () => async (ctx, next) => {\n  if (!ctx.state.user.isAdmin) ctx.throw(403);\n  await next();\n};\n\nrouter.get('/admin', requireAuth(), requireAdmin(), adminHandler);\n```\n\n### 2. Organize Routes by Resource\n\n```javascript\n// ✅ Good: Group related routes\nconst usersRouter = new Router({ prefix: '/users' });\nusersRouter.get('/', listUsers);\nusersRouter.post('/', createUser);\nusersRouter.get('/:id', getUser);\nusersRouter.put('/:id', updateUser);\nusersRouter.delete('/:id', deleteUser);\n\napp.use(usersRouter.routes());\n```\n\n### 3. Use Named Routes\n\n```javascript\n// ✅ Good: Name important routes\nrouter.get('home', '/', homeHandler);\nrouter.get('user-profile', '/users/:id', profileHandler);\n\n// Easy to generate URLs\nctx.redirect(ctx.router.url('home'));\nctx.redirect(ctx.router.url('user-profile', ctx.state.user.id));\n```\n\n### 4. Validate Early\n\n```javascript\n// ✅ Good: Validate at the route level\nrouter\n  .param('id', validateId)\n  .get('/users/:id', getUser)\n  .put('/users/:id', updateUser)\n  .delete('/users/:id', deleteUser);\n// Validation runs once for all routes\n```\n\n### 5. Handle Errors Consistently\n\n```javascript\n// ✅ Good: Centralized error handling\napp.use(async (ctx, next) => {\n  try {\n    await next();\n  } catch (err) {\n    ctx.status = err.status || 500;\n    ctx.body = {\n      error: err.message,\n      ...(process.env.NODE_ENV === 'development' && { stack: err.stack })\n    };\n  }\n});\n\napp.use(router.routes());\napp.use(router.allowedMethods({ throw: true }));\n```\n\n### 6. Access Router Context Properties\n\nThe router adds useful properties to the Koa context:\n\n```typescript\nrouter.get('/users/:id', (ctx: RouterContext) => {\n  // URL parameters (fully typed)\n  const id = ctx.params.id; // string\n\n  // Router instance\n  const router = ctx.router;\n\n  // Matched route path\n  const routePath = ctx.routerPath; // => '/users/:id'\n\n  // Matched route name (if named)\n  const routeName = ctx.routerName; // => 'user' (if named)\n\n  // All matched layers\n  const matched = ctx.matched; // Array of Layer objects\n\n  // Whether any route (with HTTP methods) was matched\n  const wasMatched = ctx.routeMatched; // boolean | undefined\n\n  // Captured values from RegExp routes\n  const captures = ctx.captures; // string[] | undefined\n\n  // Generate URLs\n  const url = ctx.router.url('user', id);\n\n  ctx.body = { id, routePath, routeName, url };\n});\n```\n\n### 7. Type-Safe Context Extensions\n\nExtend the router context with custom properties:\n\n```typescript\nimport Router, { RouterContext } from '@koa/router';\nimport type { Next } from 'koa';\n\ninterface UserState {\n  user?: { id: string; email: string };\n}\n\ninterface CustomContext {\n  requestId: string;\n  startTime: number;\n}\n\nconst router = new Router<UserState, CustomContext>();\n\n// Middleware that adds to context\nrouter.use(async (ctx: RouterContext<UserState, CustomContext>, next: Next) => {\n  ctx.requestId = crypto.randomUUID();\n  ctx.startTime = Date.now();\n  await next();\n});\n\nrouter.get(\n  '/users/:id',\n  async (ctx: RouterContext<UserState, CustomContext>) => {\n    // All properties are fully typed\n    ctx.body = {\n      user: ctx.state.user,\n      requestId: ctx.requestId,\n      duration: Date.now() - ctx.startTime\n    };\n  }\n);\n```\n\n## Recipes\n\nCommon patterns and recipes for building real-world applications with @koa/router.\n\nSee the [recipes directory](./recipes/) for complete TypeScript examples:\n\n- **[Nested Routes](./recipes/nested-routes/)** - Production-ready nested router patterns with multiple levels (3-4 levels deep), parameter propagation, and real-world examples\n- **[RESTful API Structure](./recipes/restful-api-structure/)** - Organize your API with nested routers\n- **[Authentication & Authorization](./recipes/authentication-authorization/)** - JWT-based authentication with middleware\n- **[Request Validation](./recipes/request-validation/)** - Validate request data with middleware\n- **[Parameter Validation](./recipes/parameter-validation/)** - Validate and transform parameters using router.param()\n- **[Regex Parameter Validation](./recipes/regex-parameter-validation/)** - Validate URL parameters with regex (replacement for `:param(regex)` in v14+)\n- **[API Versioning](./recipes/api-versioning/)** - Implement API versioning with multiple routers\n- **[Error Handling](./recipes/error-handling/)** - Centralized error handling with custom error classes\n- **[Pagination](./recipes/pagination/)** - Implement pagination for list endpoints\n- **[Health Checks](./recipes/health-checks/)** - Add health check endpoints for monitoring\n- **[TypeScript Recipe](./recipes/typescript-recipe/)** - Full TypeScript example with types and type safety\n- **[Not Found Handling](./recipes/not-found-handling/)** - All approaches to handling unmatched routes: `ctx.routeMatched`, events, catch-all\n\nEach recipe file contains complete, runnable TypeScript code that you can copy and adapt to your needs.\n\n## Performance\n\n@koa/router is designed for high performance:\n\n- **Fast path matching** with path-to-regexp v8\n- **Efficient RegExp compilation** and caching\n- **Minimal overhead** - zero runtime type checking\n- **Optimized middleware execution** with koa-compose\n\n**Benchmarks:**\n\n```bash\n# Run benchmarks\nyarn benchmark\n\n# Run all benchmark scenarios\nyarn benchmark:all\n```\n\n## Testing\n\n@koa/router uses Node.js native test runner:\n\n```bash\n# Run all tests (core + recipes)\nyarn test:all\n\n# Run core tests only\nyarn test:core\n\n# Run recipe tests only\nyarn test:recipes\n\n# Run tests with coverage\nyarn test:coverage\n\n# Type check\nyarn ts:check\n\n# Format code with Prettier\nyarn format\n\n# Check code formatting\nyarn format:check\n\n# Lint code\nyarn lint\n```\n\n**Example test:**\n\n```javascript\nimport { describe, it } from 'node:test';\nimport assert from 'node:assert';\nimport Koa from 'koa';\nimport Router from '@koa/router';\nimport request from 'supertest';\n\ndescribe('Router', () => {\n  it('should route GET requests', async () => {\n    const app = new Koa();\n    const router = new Router();\n\n    router.get('/users', (ctx) => {\n      ctx.body = { users: [] };\n    });\n\n    app.use(router.routes());\n\n    const res = await request(app.callback()).get('/users').expect(200);\n\n    assert.deepStrictEqual(res.body, { users: [] });\n  });\n});\n```\n\n## Migration Guides\n\nFor detailed migration information, see **[FULL_MIGRATION_TO_V15+.md](./FULL_MIGRATION_TO_V15+.md)**.\n\n**Breaking Changes:**\n\n- Custom regex patterns in parameters (`:param(regex)`) are **no longer supported** due to path-to-regexp v8. Use validation in handlers or middleware instead.\n- Node.js >= 20 is required.\n- TypeScript types are now included in the package (no need for `@types/@koa/router`).\n\n**Upgrading:**\n\n1. Update Node.js to >= 20\n2. Replace custom regex parameters with validation middleware\n3. Remove `@types/@koa/router` if installed (types are now included)\n4. Update any code using deprecated features\n\n**Backward Compatibility:**\n\nThe code is mostly backward compatible. If you notice any issues when upgrading, please don't hesitate to [open an issue](https://github.com/koajs/router/issues) and let us know!\n\n## Contributing\n\nContributions are welcome!\n\n### Development Setup\n\n```bash\n# Clone repository\ngit clone https://github.com/koajs/router.git\ncd router\n\n# Install dependencies (using yarn)\nyarn install\n\n# Run tests\nyarn test:all\n\n# Run tests with coverage\nyarn test:coverage\n\n# Format code\nyarn format\n\n# Check formatting\nyarn format:check\n\n# Lint code\nyarn lint\n\n# Build TypeScript\nyarn build\n\n# Type check\nyarn ts:check\n```\n\n## Contributors\n\n| Name             |\n| ---------------- |\n| **Alex Mingoia** |\n| **@koajs**       |\n| **Imed Jaberi**  |\n\n## License\n\n[MIT](LICENSE) © Koa.js\n\n---\n\n[forward-email]: https://forwardemail.net\n[lad]: https://lad.js.org\n[npm]: https://www.npmjs.com","users":{}}