{"_id":"@wangminghua/koa-restful","_rev":"33-a78e1184a70f7e7198f7f76cb50f38da","name":"@wangminghua/koa-restful","dist-tags":{"latest":"1.0.13","alpha":"1.0.1-2.alpha.2"},"versions":{"0.1.1":{"name":"@wangminghua/koa-restful","version":"0.1.1","description":"基于 Koa2 快速 restful api 框架 （typescript）","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","run-simple":"node ./dist-example/simple.js"},"author":{"name":"wangminghua"},"license":"ISC","peerDependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","koa":"^2.14.2","koa-compose":"^4.1.0","typescript":"^5.2.2"},"dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","typescript":"^5.2.2"},"devDependencies":{"@types/koa":"^2.13.11","@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","reflect-metadata":"^0.1.13","rimraf":"^5.0.5","@wangminghua/koa-restful":"file:./"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@wangminghua/koa-restful@0.1.1","gitHead":"7f8c24b325a7ac966b2ce2ba3a3b7e8e5008ccb3","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-/DXv2f/eD4BsBBzJk0FdQUBmZnjhJD07zaJ0dIl1/4NGCazqRZ1RTp279GDKRz+iS84RlZHkzOtbrUbS8a9iBQ==","shasum":"e1627ead1edadc884141cab5243a01c44ad9a138","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.1.1.tgz","fileCount":41,"unpackedSize":107542,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK6I3CR+Mi3WJABneEGs3DUQ5tB0YHu04x6tcrnYyhlwIgeX0y0HiZMmMvFH+zUWUhvEoNKZyv9OaWQ9nDC4OUT7c="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.1.1_1699634579457_0.8614228298596565"},"_hasShrinkwrap":false},"0.1.2":{"name":"@wangminghua/koa-restful","version":"0.1.2","description":"基于 Koa2 快速 restful api 框架 （typescript）","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","run-simple":"node ./dist-example/simple.js"},"author":{"name":"wangminghua"},"license":"ISC","peerDependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","koa":"^2.14.2","koa-compose":"^4.1.0","typescript":"^5.2.2"},"dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","typescript":"^5.2.2"},"devDependencies":{"@types/koa":"^2.13.11","@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","reflect-metadata":"^0.1.13","rimraf":"^5.0.5","@wangminghua/koa-restful":"file:./"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@wangminghua/koa-restful@0.1.2","gitHead":"e8a473dccf790fd55d8111ff14da8c296cf7aafb","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-WKGTZneoxBLoTGV/eIJkoQnFradOxFhMbJEz6xmFLJLz0nrGXuR5Wl/yxD310xQsHeUDrxJ2RSv5Jx4kUO6L8Q==","shasum":"58029e4f247532630d557028cc2ec868e0d73404","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.1.2.tgz","fileCount":61,"unpackedSize":148152,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlQvDo8RIjEvUODujiQbYtTXPx1CqRgINg4JN9YArvdwIgPOE7bEc/nL79uKy9a2ohicwb/7mhRB6j9ENx4+iZ98s="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.1.2_1699667366082_0.17084467611311394"},"_hasShrinkwrap":false},"0.1.3":{"name":"@wangminghua/koa-restful","version":"0.1.3","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-readme":"node ./script/build-readme.js","run-simple":"node ./dist-example/simple.js","run-simple-injection":"node ./dist-example/simple-injection.js","run-simple-alias-injection":"node ./dist-example/simple-alias-injection.js","run-simple-static-injection":"node ./dist-example/simple-static-injection.js"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@types/koa":"^2.13.11","@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16.0.0"},"gitHead":"645fe1cf4a358a5dfc8d46992e0b75caa85a4ef0","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@0.1.3","_nodeVersion":"16.20.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-bIBY6ZNYY5PUBOnixkza2yKwgCgTP3HjOI5A78fK35olJS0mfrM5mayQOWOlCetArYvOuPTnrVA0qkNgWgvjXw==","shasum":"e94fd311705c4f917f06271ff7c1afd21b40e787","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.1.3.tgz","fileCount":67,"unpackedSize":158113,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChWpbo5LFKGWI3Ead+AjvB/RkyRVKkQ2H/MkeUi4qssgIhALhSL8WvwoBTmJM9KWo00bCbi4/PclAQgSX/CacsxVOt"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.1.3_1700016216798_0.808076294868135"},"_hasShrinkwrap":false},"0.2.1":{"name":"@wangminghua/koa-restful","version":"0.2.1","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-di":"node ./dist-example/di.js","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@0.2.1","gitHead":"149f968ecf181b667f5bbd28eb3b9023ad5232ee","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-x4DWh8A/Ng3B/LOKs3HL31nHsEGLzQTVSAlMJza5MHmsgMV7U056L45zKO55oQkRECmjWhQcUS2wKNtcBYPRXg==","shasum":"b68d355c2df9c4e76a65a6a7e1ea56e4b94490d5","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.1.tgz","fileCount":49,"unpackedSize":140568,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2nQbKmiMls9sbQIFiHT0gUbWByQY/lIxD8a7bMM9+6AiALFAnfVmfEyk4808jmV0EGtUNezuRU+b38np1in0blvw=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.1_1701451299477_0.24312694475927454"},"_hasShrinkwrap":false},"0.2.2":{"name":"@wangminghua/koa-restful","version":"0.2.2","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","openapi-types":"^12.1.3","rimraf":"^5.0.5","ts-morph":"^21.0.1","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@0.2.2","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install koa @wangminghua/koa-restful\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install koa @wangminghua/koa-restful\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 执行\n\n> 请参照该仓库，也可以按需求自主集成\n\n> [src-example/simple.ts](src-example/simple.ts)\n\n#### 在线测试\n\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\n\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"e54b1114e02ef251ebb780446c2492a6ef28d55e","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-+DW/zDwNLZPOhXudAtdqLpc97OkYRWwKchm+HDz/5qeU7TfXmxqPGQMYjkLFojwQU3/aOw4MdUqjtOEx/9Swgw==","shasum":"0bd84ddc5d050bd872c6d6bd3e08013ffbc863ad","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.2.tgz","fileCount":57,"unpackedSize":187636,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDS0FvZTSQ4pbh3NzN1t3AZRgDKYmg1eNiNLzHa8+qjJAiA6UfdwvWiUtRKwAa9umL1OWeN0LgQiFmg5TYHrokzNMg=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.2_1702227032145_0.7576809928627422"},"_hasShrinkwrap":false},"0.2.3":{"name":"@wangminghua/koa-restful","version":"0.2.3","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","openapi-types":"^12.1.3","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 执行\n\n> 请参照该仓库，也可以按需求自主集成\n\n> [src-example/simple.ts](src-example/simple.ts)\n\n#### 在线测试\n\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\n\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"b92f8145cdf41fda929a96702d43f8cd1894277a","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@0.2.3","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-h/VgE1vVI4oxRDcN1Posb+xhSMTr/MdeXT7tgvv23igB2pUABiGCIm/TpCexeoKJsvfBQ9EGw8Nvs8evpj/FpQ==","shasum":"ed1b521f6470860267070c9246c6e11cd6f3e783","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.3.tgz","fileCount":57,"unpackedSize":192835,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCThQXJhVWhLs4UOxrqVKSblZmM9yV6LuOK3jGRAR3IvAIhAPmIHX09htvzK+9M8T/fm5f+686N5XY7P/OK6ASFL2nJ"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.3_1702271877093_0.6230433298120184"},"_hasShrinkwrap":false},"0.2.4":{"name":"@wangminghua/koa-restful","version":"0.2.4","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","openapi-types":"^12.1.3","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@0.2.4","gitHead":"f128778043467356f76b8ec22cd0ea66bab25260","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-PJzo6OKE+8SJnBSbSNHvy4VyM/gkZJgYy/o2zlQEuRW6KywlP8jMAoiuKRz7v53MgMbLFiKOUCUTy2tkvRr6ww==","shasum":"8f57b21d39c47d1cc6457d3eaefb6e1d51805732","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.4.tgz","fileCount":58,"unpackedSize":193759,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmne29eUOsiFf/uXvo71M11aHJfu1NQ+hiHtQxQ7EDnQIhAKwFaBUFCluTDGCGrMtZsRq7NvdfedAtlezFoORlro1p"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.4_1702309636044_0.9506986603991021"},"_hasShrinkwrap":false},"0.2.5":{"name":"@wangminghua/koa-restful","version":"0.2.5","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@0.2.5","gitHead":"fc4d444969fe6accba12782db494efd031827c1b","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-i0FfrqdehTOlh4ICfkFnq9SKHOFjzjD5gMd2/8oZwSWqXZ/XguELBGEST4A4rQ+JgNFT64iZBXnSmiq7t9AKcw==","shasum":"7a54c38b6e970296796efcc43070d5fd7bbc6bb7","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.5.tgz","fileCount":58,"unpackedSize":194315,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDAqn0lYdszruYJUuIduiSioTjxHx6VoSocgN15rLsUjAiAUoOpXmgS1IBmsF28z/okKBNQRsLSR2dgMti7SVhVfYg=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.5_1702491771304_0.3477480962710342"},"_hasShrinkwrap":false},"0.2.6":{"name":"@wangminghua/koa-restful","version":"0.2.6","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"f420db0421c473e064b7d012cf8cb92b8f5d335f","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@0.2.6","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-ZhSMgbOGGj6K3maDTon7S+62QHRhq5zyrAcB447ZXfz+0VmbMFibn+fM8ScQ7gC19Xt7CB6HKHJORyKDBdJMZg==","shasum":"c92d5340a021799537146df5aaa36d5badc96381","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-0.2.6.tgz","fileCount":57,"unpackedSize":198377,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHsIrG+53T5TZGDnNDkEc34PGEdRszIUz7/ROdGPqnwgIhAIIiAW/nzyA+Ec3D/2Iuae3HB1WW5u/C4Ejbi/SZsdqW"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_0.2.6_1702621341575_0.3358563817171163"},"_hasShrinkwrap":false},"1.0.0-alpha.1":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.1","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.0-alpha.1","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 执行\n\n> 请参照该仓库，也可以按需求自主集成\n\n> [src-example/simple.ts](src-example/simple.ts)\n\n#### 在线测试\n\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\n\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"f35734655c13f9ab8028152d60a6ffbe94855a45","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-le3c8lL34flv/L8cpunOXbrkqdWQl1ULL7SeUPM2a1NLBGHrAwYSfvjCFpGU1C/ti6sZp2ag5p5yn+WrkU9PTA==","shasum":"44acb90efe2376cb7221a1505ce708fc16638fc1","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.1.tgz","fileCount":67,"unpackedSize":201590,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpYwuuXdeRKSvbo1wd879b7RoHxiYmGMaVDfeuV9H7QwIhANl9zTPdngvDI4K7jh+2rD3mouw79f7nOf+A1Ncm8xmX"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.1_1702663610510_0.8413295119638797"},"_hasShrinkwrap":false},"1.0.0-alpha.2":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.2","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.0-alpha.2","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 执行\n\n> 请参照该仓库，也可以按需求自主集成\n\n> [src-example/simple.ts](src-example/simple.ts)\n\n#### 在线测试\n\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\n\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"f35734655c13f9ab8028152d60a6ffbe94855a45","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-6fYITRvZQD/VsLfGXUTy/fuHFkodfZoT45wc+hsFXU824So4cyY3IEdQ/zWeG0rZpQvlGWgRqpg+NKN6BZ9Thg==","shasum":"3563d0ab97be953e03beb0dfa5af6096cc347b1e","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.2.tgz","fileCount":67,"unpackedSize":201615,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcLKnPZky+s3g43N6slpPRocPl/rRHVkndJlXJCWg9vgIgFEENhdXL1dArSYqSx+ZuItF7ah/GpqaggwxqKLD2/A4="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.2_1702664516335_0.6810246415968062"},"_hasShrinkwrap":false},"1.0.0-alpha.3":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.3","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.0-alpha.3","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 执行\n\n> 请参照该仓库，也可以按需求自主集成\n\n> [src-example/simple.ts](src-example/simple.ts)\n\n#### 在线测试\n\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\n\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"4d3f6517e5cd4a88717aa7e6bb7e6c662b3cc7e3","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-3x49k1P6EOJJS/LfgKl+zEzkKs1sB0/mzlfA1nxwwHRg0OPmFpu32Zqvu5v4/Ubcm6KUpuOqORyRCa1ImNsc+Q==","shasum":"b16d47112f019e7db9c5932b50da5edeb3863013","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.3.tgz","fileCount":67,"unpackedSize":201797,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICy/Am3VFKuOu5Wg9Yzunv9ufzsHLEc32XSYZrGzxNeiAiBh1zeflP5MyAf13fYzRjokDpWyCjByrK0V4ghAdKlxKw=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.3_1702701476956_0.5508569772221956"},"_hasShrinkwrap":false},"1.0.0-alpha.4":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.4","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"readme":"# koa-restful\r\n\r\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\r\n\r\n<!-- PROJECT SHIELDS -->\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n\r\n <!-- links -->\r\n\r\n[your-project-path]: wangminghua111/koa-restful\r\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\r\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\r\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\r\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\r\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\r\n\r\n<!-- PROJECT LOGO -->\r\n<br />\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\r\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\r\n  </a>\r\n\r\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\r\n  <p align=\"center\">\r\n    一个\"超简单\"的Restful快速开始你的项目！\r\n    <br />\r\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\r\n    <br />\r\n    <br />\r\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\r\n  </p>\r\n\r\n</p>\r\n\r\n## 上手指南\r\n\r\n### 依赖\r\n\r\n```sh\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n```\r\n\r\n### 开发前的配置要求\r\n\r\n1. Node 版本要求 >= 16\r\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\r\n\r\n### 运行仓库 demo\r\n\r\n```sh\r\n# 克隆源码仓库\r\ngit clone https://github.com/WangMingHua111/koa-restful.git\r\n\r\n# 进入工作目录\r\ncd koa-restful\r\n\r\n# npm插入依赖\r\nnpm install\r\n\r\n# 构建dist、dist-example、README.md\r\nnpm run build-all\r\n\r\n# 运行示例\r\nnpm run run-simple\r\n\r\n```\r\n\r\n### 工程创建\r\n\r\n#### 创建工程目录\r\n\r\n```sh\r\n# 你的工程名称\r\nmkdir simple-api\r\n# 进入项目目录\r\ncd simple-api\r\n# npm 初始化，执行npm初始化流程\r\nnpm init\r\n# 安装 koa 和 koa-restful\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n# 执行typescript配置文件初始化\r\nnpx tsc --init\r\n```\r\n\r\n#### 执行\r\n\r\n> 请参照该仓库，也可以按需求自主集成\r\n\r\n> [src-example/simple.ts](src-example/simple.ts)\r\n\r\n#### 在线测试\r\n\r\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\r\n\r\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\r\n\r\n## 示例代码\r\n\r\n### src-example\\simple.ts 常用示例\r\n\r\n```typescript\r\n// src-example/simple.ts\r\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\r\nimport Koa, { Context } from 'koa'\r\n\r\n// 测试类型\r\ntype TestModel = { name: string; value: string }\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n\r\n    // 获取查询参数\r\n    @HttpGet()\r\n    test2(@FromQuery() name: string): string {\r\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\r\n    }\r\n\r\n    // 获取路径参数\r\n    @HttpGet('test3/:id')\r\n    test3(@FromRoute() id: string): string {\r\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\r\n    }\r\n\r\n    // 读取路径参数和查询参数\r\n    @HttpGet('test4/:id')\r\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\r\n    }\r\n\r\n    // 第一个参数默认为Koa Context\r\n    @HttpGet('test5/:id')\r\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\r\n    }\r\n\r\n    // 方法参数名称不匹配时，指定从固定参数读取\r\n    @HttpGet('test6/:id')\r\n    test6(@FromRoute('id') id2: string): string {\r\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\r\n    }\r\n\r\n    // 从请求头读取token参数\r\n    @HttpGet()\r\n    test7(@FromHeader() token: string): string {\r\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\r\n    }\r\n    // 强制路由转换 为 test8-2\r\n    @HttpGet('test8-2')\r\n    test8(): string {\r\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n@Controller()\r\nclass OtherController {\r\n    // 返回一个字符串 /other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 返回修改过的TestModel /other/test2\r\n    @HttpPost()\r\n    test2(@FromBody() body: TestModel): TestModel {\r\n        body.name += '-back'\r\n        body.value += '-back'\r\n        return body\r\n    }\r\n\r\n    // 一个方法同时支持多种类型的请求 /other/test3\r\n    @HttpGet()\r\n    @HttpPost()\r\n    @HttpDelete()\r\n    @HttpPatch()\r\n    @HttpHead()\r\n    @HttpPut()\r\n    test3(): TestModel {\r\n        return { name: 'n1', value: 'n2' }\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n// 指定控制器路由\r\n@Controller('api/other')\r\nclass Other2Controller {\r\n    // 返回一个字符串 /api/other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 指定方法路由为 /api/other/t\r\n    @HttpPost('t')\r\n    test2(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n\r\n### src-example\\di.ts 依赖注入示例\r\n\r\n```typescript\r\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\r\nimport Koa from 'koa'\r\n\r\ninterface IDep {\r\n    val(): number\r\n}\r\n\r\nabstract class Dep {\r\n    constructor() {}\r\n    abstract val(): number\r\n}\r\n\r\n// 声明一个依赖\r\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\r\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\r\nclass DepImpl extends Dep {\r\n    val(): number {\r\n        return Date.now()\r\n    }\r\n}\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 注入DepImpl\r\n    @Injection()\r\n    dep1!: DepImpl\r\n    // 注入抽象类Dep\r\n    @Injection()\r\n    dep2!: Dep\r\n    // 通过uniqueId查找对象注入IDep\r\n    @Injection({ uniqueId: 'DepImpl' })\r\n    dep3!: IDep\r\n\r\n    // 解析依赖DepImpl\r\n    dep4 = ResolveDependency(DepImpl)\r\n    // 解析依赖Dep\r\n    dep5 = ResolveDependency(Dep)\r\n    // 通过uniqueId，解析依赖IDep\r\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\r\n        arr.forEach(console.log) // 日志输出注入/解析对象\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n","readmeFilename":"README.md","gitHead":"5465c7397bb2399b3726bc83e86331faa27a8a87","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.0-alpha.4","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-/xXWmzhUTH3iQDClF3boEfO37pkn6hBY0kZ1CaMLe7lgCx4wOAIOs+/+FFEsNi/AjBV0DVjoXmMk/Xpe//8Xew==","shasum":"6ee89597f33fd86d8a640a5c4d9cd68d4cd86799","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.4.tgz","fileCount":67,"unpackedSize":205149,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA904j/Wonxxz6d8MyGMHcLytoMWxipjcUZQC7O8nhBhAiEAtjTrbscfEFG2U7qldok3We2pQArvvd7LV/AlSWgChAg="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.4_1702729254866_0.05782091632702446"},"_hasShrinkwrap":false},"1.0.0-alpha.5":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.5","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"readme":"# koa-restful\r\n\r\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\r\n\r\n<!-- PROJECT SHIELDS -->\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n\r\n <!-- links -->\r\n\r\n[your-project-path]: wangminghua111/koa-restful\r\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\r\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\r\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\r\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\r\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\r\n\r\n<!-- PROJECT LOGO -->\r\n<br />\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\r\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\r\n  </a>\r\n\r\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\r\n  <p align=\"center\">\r\n    一个\"超简单\"的Restful快速开始你的项目！\r\n    <br />\r\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\r\n    <br />\r\n    <br />\r\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\r\n  </p>\r\n\r\n</p>\r\n\r\n## 上手指南\r\n\r\n### 依赖\r\n\r\n```sh\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n```\r\n\r\n### 开发前的配置要求\r\n\r\n1. Node 版本要求 >= 16\r\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\r\n\r\n### 运行仓库 demo\r\n\r\n```sh\r\n# 克隆源码仓库\r\ngit clone https://github.com/WangMingHua111/koa-restful.git\r\n\r\n# 进入工作目录\r\ncd koa-restful\r\n\r\n# npm插入依赖\r\nnpm install\r\n\r\n# 构建dist、dist-example、README.md\r\nnpm run build-all\r\n\r\n# 运行示例\r\nnpm run run-simple\r\n\r\n```\r\n\r\n### 工程创建\r\n\r\n#### 创建工程目录\r\n\r\n```sh\r\n# 你的工程名称\r\nmkdir simple-api\r\n# 进入项目目录\r\ncd simple-api\r\n# npm 初始化，执行npm初始化流程\r\nnpm init\r\n# 安装 koa 和 koa-restful\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n# 执行typescript配置文件初始化\r\nnpx tsc --init\r\n```\r\n\r\n#### 执行\r\n\r\n> 请参照该仓库，也可以按需求自主集成\r\n\r\n> [src-example/simple.ts](src-example/simple.ts)\r\n\r\n#### 在线测试\r\n\r\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\r\n\r\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\r\n\r\n## 示例代码\r\n\r\n### src-example\\simple.ts 常用示例\r\n\r\n```typescript\r\n// src-example/simple.ts\r\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\r\nimport Koa, { Context } from 'koa'\r\n\r\n// 测试类型\r\ntype TestModel = { name: string; value: string }\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n\r\n    // 获取查询参数\r\n    @HttpGet()\r\n    test2(@FromQuery() name: string): string {\r\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\r\n    }\r\n\r\n    // 获取路径参数\r\n    @HttpGet('test3/:id')\r\n    test3(@FromRoute() id: string): string {\r\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\r\n    }\r\n\r\n    // 读取路径参数和查询参数\r\n    @HttpGet('test4/:id')\r\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\r\n    }\r\n\r\n    // 第一个参数默认为Koa Context\r\n    @HttpGet('test5/:id')\r\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\r\n    }\r\n\r\n    // 方法参数名称不匹配时，指定从固定参数读取\r\n    @HttpGet('test6/:id')\r\n    test6(@FromRoute('id') id2: string): string {\r\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\r\n    }\r\n\r\n    // 从请求头读取token参数\r\n    @HttpGet()\r\n    test7(@FromHeader() token: string): string {\r\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\r\n    }\r\n    // 强制路由转换 为 test8-2\r\n    @HttpGet('test8-2')\r\n    test8(): string {\r\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n@Controller()\r\nclass OtherController {\r\n    // 返回一个字符串 /other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 返回修改过的TestModel /other/test2\r\n    @HttpPost()\r\n    test2(@FromBody() body: TestModel): TestModel {\r\n        body.name += '-back'\r\n        body.value += '-back'\r\n        return body\r\n    }\r\n\r\n    // 一个方法同时支持多种类型的请求 /other/test3\r\n    @HttpGet()\r\n    @HttpPost()\r\n    @HttpDelete()\r\n    @HttpPatch()\r\n    @HttpHead()\r\n    @HttpPut()\r\n    test3(): TestModel {\r\n        return { name: 'n1', value: 'n2' }\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n// 指定控制器路由\r\n@Controller('api/other')\r\nclass Other2Controller {\r\n    // 返回一个字符串 /api/other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 指定方法路由为 /api/other/t\r\n    @HttpPost('t')\r\n    test2(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n\r\n### src-example\\di.ts 依赖注入示例\r\n\r\n```typescript\r\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\r\nimport Koa from 'koa'\r\n\r\ninterface IDep {\r\n    val(): number\r\n}\r\n\r\nabstract class Dep {\r\n    constructor() {}\r\n    abstract val(): number\r\n}\r\n\r\n// 声明一个依赖\r\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\r\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\r\nclass DepImpl extends Dep {\r\n    val(): number {\r\n        return Date.now()\r\n    }\r\n}\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 注入DepImpl\r\n    @Injection()\r\n    dep1!: DepImpl\r\n    // 注入抽象类Dep\r\n    @Injection()\r\n    dep2!: Dep\r\n    // 通过uniqueId查找对象注入IDep\r\n    @Injection({ uniqueId: 'DepImpl' })\r\n    dep3!: IDep\r\n\r\n    // 解析依赖DepImpl\r\n    dep4 = ResolveDependency(DepImpl)\r\n    // 解析依赖Dep\r\n    dep5 = ResolveDependency(Dep)\r\n    // 通过uniqueId，解析依赖IDep\r\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\r\n        arr.forEach(console.log) // 日志输出注入/解析对象\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n","readmeFilename":"README.md","gitHead":"9cfcb2c4a131622a5e83be493797e57b7f1455d9","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.0-alpha.5","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-4rWuJ/cxXHd7+Dx0/hVBaYk1n600uQpxPyTVwKUEWtpoiU+9RKNumz25GN3lboY8OUGpJ9zm+Xb37DT68lL4nw==","shasum":"e261f050e74de4feb40312d4c55ae5952a6e97db","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.5.tgz","fileCount":67,"unpackedSize":205252,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZt1hVviCV2uaOhNBkwaqUHGCF6sR/MSnynKCPaqqKMAiAlpL4wBwOwJb+1W+pD+GqrIL7cBTgkUcY9LHPxlpp7fQ=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.5_1702733340808_0.4847864293537685"},"_hasShrinkwrap":false},"1.0.0-alpha.6":{"name":"@wangminghua/koa-restful","version":"1.0.0-alpha.6","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"readme":"# koa-restful\r\n\r\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\r\n\r\n<!-- PROJECT SHIELDS -->\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n\r\n <!-- links -->\r\n\r\n[your-project-path]: wangminghua111/koa-restful\r\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\r\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\r\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\r\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\r\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\r\n\r\n<!-- PROJECT LOGO -->\r\n<br />\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\r\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\r\n  </a>\r\n\r\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\r\n  <p align=\"center\">\r\n    一个\"超简单\"的Restful快速开始你的项目！\r\n    <br />\r\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\r\n    <br />\r\n    <br />\r\n    <a href=\"https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13\">查看Demo</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\r\n  </p>\r\n\r\n</p>\r\n\r\n## 上手指南\r\n\r\n### 依赖\r\n\r\n```sh\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n```\r\n\r\n### 开发前的配置要求\r\n\r\n1. Node 版本要求 >= 16\r\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\r\n\r\n### 运行仓库 demo\r\n\r\n```sh\r\n# 克隆源码仓库\r\ngit clone https://github.com/WangMingHua111/koa-restful.git\r\n\r\n# 进入工作目录\r\ncd koa-restful\r\n\r\n# npm插入依赖\r\nnpm install\r\n\r\n# 构建dist、dist-example、README.md\r\nnpm run build-all\r\n\r\n# 运行示例\r\nnpm run run-simple\r\n\r\n```\r\n\r\n### 工程创建\r\n\r\n#### 创建工程目录\r\n\r\n```sh\r\n# 你的工程名称\r\nmkdir simple-api\r\n# 进入项目目录\r\ncd simple-api\r\n# npm 初始化，执行npm初始化流程\r\nnpm init\r\n# 安装 koa 和 koa-restful\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n# 执行typescript配置文件初始化\r\nnpx tsc --init\r\n```\r\n\r\n#### 执行\r\n\r\n> 请参照该仓库，也可以按需求自主集成\r\n\r\n> [src-example/simple.ts](src-example/simple.ts)\r\n\r\n#### 在线测试\r\n\r\n传送门 [koa-restful-demo 在线测试](https://codesandbox.io/p/sandbox/koa-restful-demo-kz4pl8?embed=1&file=%2Fsrc%2Findex.ts%3A20%2C13)\r\n\r\n![传送门](https://github.com/wangminghua111/koa-restful/raw/master/images/codesandbox.io.gif)\r\n\r\n## 示例代码\r\n\r\n### src-example\\simple.ts 常用示例\r\n\r\n```typescript\r\n// src-example/simple.ts\r\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\r\nimport Koa, { Context } from 'koa'\r\n\r\n// 测试类型\r\ntype TestModel = { name: string; value: string }\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n\r\n    // 获取查询参数\r\n    @HttpGet()\r\n    test2(@FromQuery() name: string): string {\r\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\r\n    }\r\n\r\n    // 获取路径参数\r\n    @HttpGet('test3/:id')\r\n    test3(@FromRoute() id: string): string {\r\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\r\n    }\r\n\r\n    // 读取路径参数和查询参数\r\n    @HttpGet('test4/:id')\r\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\r\n    }\r\n\r\n    // 第一个参数默认为Koa Context\r\n    @HttpGet('test5/:id')\r\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\r\n    }\r\n\r\n    // 方法参数名称不匹配时，指定从固定参数读取\r\n    @HttpGet('test6/:id')\r\n    test6(@FromRoute('id') id2: string): string {\r\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\r\n    }\r\n\r\n    // 从请求头读取token参数\r\n    @HttpGet()\r\n    test7(@FromHeader() token: string): string {\r\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\r\n    }\r\n    // 强制路由转换 为 test8-2\r\n    @HttpGet('test8-2')\r\n    test8(): string {\r\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n@Controller()\r\nclass OtherController {\r\n    // 返回一个字符串 /other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 返回修改过的TestModel /other/test2\r\n    @HttpPost()\r\n    test2(@FromBody() body: TestModel): TestModel {\r\n        body.name += '-back'\r\n        body.value += '-back'\r\n        return body\r\n    }\r\n\r\n    // 一个方法同时支持多种类型的请求 /other/test3\r\n    @HttpGet()\r\n    @HttpPost()\r\n    @HttpDelete()\r\n    @HttpPatch()\r\n    @HttpHead()\r\n    @HttpPut()\r\n    test3(): TestModel {\r\n        return { name: 'n1', value: 'n2' }\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n// 指定控制器路由\r\n@Controller('api/other')\r\nclass Other2Controller {\r\n    // 返回一个字符串 /api/other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 指定方法路由为 /api/other/t\r\n    @HttpPost('t')\r\n    test2(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n\r\n### src-example\\di.ts 依赖注入示例\r\n\r\n```typescript\r\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\r\nimport Koa from 'koa'\r\n\r\ninterface IDep {\r\n    val(): number\r\n}\r\n\r\nabstract class Dep {\r\n    constructor() {}\r\n    abstract val(): number\r\n}\r\n\r\n// 声明一个依赖\r\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\r\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\r\nclass DepImpl extends Dep {\r\n    val(): number {\r\n        return Date.now()\r\n    }\r\n}\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 注入DepImpl\r\n    @Injection()\r\n    dep1!: DepImpl\r\n    // 注入抽象类Dep\r\n    @Injection()\r\n    dep2!: Dep\r\n    // 通过uniqueId查找对象注入IDep\r\n    @Injection({ uniqueId: 'DepImpl' })\r\n    dep3!: IDep\r\n\r\n    // 解析依赖DepImpl\r\n    dep4 = ResolveDependency(DepImpl)\r\n    // 解析依赖Dep\r\n    dep5 = ResolveDependency(Dep)\r\n    // 通过uniqueId，解析依赖IDep\r\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\r\n        arr.forEach(console.log) // 日志输出注入/解析对象\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n","readmeFilename":"README.md","gitHead":"5245bc4d7c8df49b20480a07fa1a65479f4eb6a2","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.0-alpha.6","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-MkIMP/BbjIJN3UdLB8jvt38YEL9rZcZFt506c2d2dSQt+5EmZmlXwxQdtxI3GuPL+Ob/jCrIJRfnzb3py9wk0w==","shasum":"0e14654a13d056534c86046fa6e0bf2f1856d44a","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.0-alpha.6.tgz","fileCount":67,"unpackedSize":207965,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFoxCrvcF2hTSc6W9a/772dJajqNHvd2bHoHizraxPvnAiADVJFKOXi98S0D7njkwhWxN25ZaQz1MV+xW3FiGxfoDQ=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.0-alpha.6_1702738438326_0.27156166981842045"},"_hasShrinkwrap":false},"1.0.1":{"name":"@wangminghua/koa-restful","version":"1.0.1","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"133b8051568cfe950b0add04c953797dff6cfabf","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-UQvm35CfB3L53KvTgjLqowieFbZbSRRauJPCWTZqycbL9NmxVnXXLdxP6R/iXaX150a7cov7LXe8Gh02ESzDhg==","shasum":"da73e8a126eaf3546a9125a040cfe7b3ad07c7e8","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.1.tgz","fileCount":67,"unpackedSize":208028,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoMGnqlUvjHYSba9DGlUj6Ew44wck9mQX9Lcs7fdMpkgIhANIs8Gs8qGXV45OvBHgjBN6CjAhi9zsUgf7y6BT5L0Bl"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.1_1702738736686_0.8157846047114758"},"_hasShrinkwrap":false},"1.0.2":{"name":"@wangminghua/koa-restful","version":"1.0.2","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"c0f74c1033904478861fd8b457217258a3e92397","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.2","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-fCpieWyG5+5C9T1902miJAykmomq8wpJQwMjbvScnhdlvljpy9Co7Uf4Z7SLzhQfxKXpQJ6X4zQKIOx9Yindmg==","shasum":"1ba51750d2adc48765eb643b899517e9424a6ba7","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.2.tgz","fileCount":67,"unpackedSize":210750,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD194SeO+xGixx6emMG10KN3StUPUvJoIruz9O8jceDFAIgFOdRjTehzWacQ9dM1fwqH0AiZkayqoHnVJ60y2snk6U="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.2_1702744357290_0.9904695888136144"},"_hasShrinkwrap":false},"1.0.3-alpha.1":{"name":"@wangminghua/koa-restful","version":"1.0.3-alpha.1","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"c9fed4ee9307796cbf3ff2e55dc04a0166cf8775","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.3-alpha.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-Vv0zQnKzJPchd9ps9MTdxRFf1l4/oyVXJXC8VletAoL1aQBM/DwZgViFbewJBVBu4LAcidqh9Q1QEz/PmMmfIQ==","shasum":"350b89b1d6da7c1a8a8494b20e7c9d66cf8290f5","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.3-alpha.1.tgz","fileCount":67,"unpackedSize":210897,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB62J1UZkIOCPg3KrlkkFnh8wxDVQQK2/TOICfhepLn3AiEA97bOYKRPV9B59OEK1S7NEA2uEVrpYoxszIOQaQCMyYY="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.3-alpha.1_1702798560987_0.8381331415851534"},"_hasShrinkwrap":false},"1.0.3":{"name":"@wangminghua/koa-restful","version":"1.0.3","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"ba560d3895622e772abd29adb926dac77d4eed25","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.3","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-xYIPkKC87nAFS2XRsfN/tQMpTihvbLA7MI9YCy3bh43n5fZbvm+TyY4aq5ZcwImlbrZCRWq4EHzOjv7ZY/Zq2Q==","shasum":"02e7341d28d4fb3327fd99d307c93d76daa7499a","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.3.tgz","fileCount":67,"unpackedSize":210971,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZsz1KYLPXfANNL7LZwZGTwRgUKdaB4rW7nWlf8xhhzAiEAsuh71UMTMafbI7/6GHujCA4YIBHaw/HjjMhwb1wxS08="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.3_1702801107461_0.5719406588634499"},"_hasShrinkwrap":false},"1.0.4":{"name":"@wangminghua/koa-restful","version":"1.0.4","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"7e003174c545fc8324a79a4de84549dccd3c673f","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.4","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-LCtegYJNmZYWUtL2Kwm8QT70gZvvbiRYpCoPLBPBfoaVs6SJsJkzPAwSPnk9Hudlz58XxM2ZPIH46D/aBC7ZhA==","shasum":"9e1fc7b6485c03c9f397d942f9ed5e8e14482d3f","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.4.tgz","fileCount":67,"unpackedSize":210889,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIClIumxn+GHLPQ+MqcPbdlD47yqX4ZivQMZhwBNSpTUjAiEA1ohAhfJIKCSfC3bIkhuS4cYdHE/hXcFqN2e1rGJFbDU="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.4_1702802685587_0.6166102516305589"},"_hasShrinkwrap":false},"1.0.5":{"name":"@wangminghua/koa-restful","version":"1.0.5","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"6d7bb300bbe353c2737f9aec4b1598035876e8ed","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.5","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-BWp5uCNkuBW6CFx4AhbqrC1afWDvPaDn1jyPzWHQgn8NjurP9cIllBtsFyNkRIDgtTvcpTmBx1DEOQBMnObDlA==","shasum":"91261b2d10b781bfab8f8b395285fa91205f13de","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.5.tgz","fileCount":67,"unpackedSize":214679,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEA2VXQ/uYbU2nR4JUxsyDO199kSQPZU/dAj8paLUE+AIhANVTA91V8NqWHxzsEPBHulUuZY5najB0hGhfHvQr/8XY"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.5_1702808338867_0.47286069497960614"},"_hasShrinkwrap":false},"1.0.6":{"name":"@wangminghua/koa-restful","version":"1.0.6","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"d74d2ac7e30715c89e6227865e5e99b9aa099457","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.6","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-m7SVcK9xED1V2Q0/VT1/ojPqHsrFHbZwg6tNfQQ8O49cjdQBv3CcP+zdSjTA1b1xMMs3/DVaqEzjR5znGJc4yQ==","shasum":"79fe58cd101c426a327dbaceff6d6184c2e7c464","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.6.tgz","fileCount":67,"unpackedSize":213059,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo6BW1NZvcN9bwUkXuTjWmVDFCYoyxvq4plOtJqnZ+dQIhAP4UP+8KF1ValeLuU2wKY9ecGeKKePpQX5LNzu68N5js"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.6_1702809572069_0.8349569622661426"},"_hasShrinkwrap":false},"1.0.7":{"name":"@wangminghua/koa-restful","version":"1.0.7","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","types":"./dist/types/index.d.ts","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-all":"npm run build && npm run build-example","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","reflect-metadata":"^0.1.13","typescript":"^5.2.2","ts-morph":"^21.0.1","openapi-types":"^12.1.3"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"gitHead":"77e9c214d944521525b9ac4ed35ebe491b3fd6b2","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.7","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-tjsEceDHUBdgElKJkZlD3VI6pbvcgCt9DF3oBAsugA0XCCAXxPmrMRlJEzlW3TcelWsX9J8v96Tk1OkQnMlCVA==","shasum":"ba71d5486e81961cd4857eeb857f82ae25624c50","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.7.tgz","fileCount":80,"unpackedSize":283862,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLBQEYdgas6gp60n9RSZNAs9aMDYbww5gTgmcUI17lwQIgMD1mM0BFLy2hw5QFihvni0MlWjnNpC5jw9jOSOCpfJs="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.7_1702988474952_0.4359167613350827"},"_hasShrinkwrap":false},"1.0.8":{"name":"@wangminghua/koa-restful","version":"1.0.8","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"types":"./dist/index.d.ts","gitHead":"6ce758fcfdbf4bb9dfae58371199005bcf9d9572","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.8","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-gX6XKYeCBFSvhyFf7OsIiLT1t/ywTJwmL/F4VTlD98CghZYT5hNEmuRVLlWdXbYvYDoB51ySZ/QEfXdSBW2Mfw==","shasum":"f4a1d2b8e6440df2afdef5b0a3d042917ccf36c9","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.8.tgz","fileCount":151,"unpackedSize":349209,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCHDZHOOk4IylyLu9Mca1oo7F+DyfsW4Xr9AZCnM4TPwIhAKPlhsvQwmdNjGHgTh0wnxjMSUICieSkVr1e22POkGCQ"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.8_1703501421040_0.3051293890836124"},"_hasShrinkwrap":false},"1.0.9":{"name":"@wangminghua/koa-restful","version":"1.0.9","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"types":"./dist/index.d.ts","gitHead":"a2569d6797437a392c7a3f9cff774aff5dc326bc","readme":"# koa-restful\r\n\r\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\r\n\r\n<!-- PROJECT SHIELDS -->\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n\r\n <!-- links -->\r\n\r\n[your-project-path]: wangminghua111/koa-restful\r\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\r\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\r\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\r\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\r\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\r\n\r\n<!-- PROJECT LOGO -->\r\n<br />\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\r\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\r\n  </a>\r\n\r\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\r\n  <p align=\"center\">\r\n    一个\"超简单\"的Restful快速开始你的项目！\r\n    <br />\r\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\r\n    <br />\r\n    <br />\r\n    <a href=\"https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master\">查看Demo/在线测试</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\r\n  </p>\r\n\r\n</p>\r\n\r\n## 上手指南\r\n\r\n### 依赖\r\n\r\n```sh\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n```\r\n\r\n### 开发前的配置要求\r\n\r\n1. Node 版本要求 >= 16\r\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\r\n\r\n### 运行仓库 demo\r\n\r\n```sh\r\n# 克隆源码仓库\r\ngit clone https://github.com/WangMingHua111/koa-restful.git\r\n\r\n# 进入工作目录\r\ncd koa-restful\r\n\r\n# npm插入依赖\r\nnpm install\r\n\r\n# 构建dist、dist-example、README.md\r\nnpm run build-all\r\n\r\n# 运行示例\r\nnpm run run-simple\r\n\r\n```\r\n\r\n### 工程创建\r\n\r\n#### 创建工程目录\r\n\r\n```sh\r\n# 你的工程名称\r\nmkdir simple-api\r\n# 进入项目目录\r\ncd simple-api\r\n# npm 初始化，执行npm初始化流程\r\nnpm init\r\n# 安装 koa 和 koa-restful\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n# 执行typescript配置文件初始化\r\nnpx tsc --init\r\n```\r\n\r\n#### 工程模板（快速启动器）\r\n\r\n[koa-restful-quick-start](https://github.com/WangMingHua111/koa-restful-quick-start)\r\n\r\n#### 在线测试\r\n\r\n传送门 [koa-restful-quick-start 在线测试](https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master)\r\n\r\n![传送门](https://github.com/WangMingHua111/koa-restful-quick-start/blob/master/image/codesandbox.png)\r\n\r\n### QQ 交流群\r\n\r\n![QQ交流群](https://github.com/wangminghua111/koa-restful/raw/master/images/QQ-KoaRestful.png)\r\n\r\n## 示例代码\r\n\r\n### src-example\\simple.ts 常用示例\r\n\r\n```typescript\r\n// src-example/simple.ts\r\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\r\nimport Koa, { Context } from 'koa'\r\n\r\n// 测试类型\r\ntype TestModel = { name: string; value: string }\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n\r\n    // 获取查询参数\r\n    @HttpGet()\r\n    test2(@FromQuery() name: string): string {\r\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\r\n    }\r\n\r\n    // 获取路径参数\r\n    @HttpGet('test3/:id')\r\n    test3(@FromRoute() id: string): string {\r\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\r\n    }\r\n\r\n    // 读取路径参数和查询参数\r\n    @HttpGet('test4/:id')\r\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\r\n    }\r\n\r\n    // 第一个参数默认为Koa Context\r\n    @HttpGet('test5/:id')\r\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\r\n    }\r\n\r\n    // 方法参数名称不匹配时，指定从固定参数读取\r\n    @HttpGet('test6/:id')\r\n    test6(@FromRoute('id') id2: string): string {\r\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\r\n    }\r\n\r\n    // 从请求头读取token参数\r\n    @HttpGet()\r\n    test7(@FromHeader() token: string): string {\r\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\r\n    }\r\n    // 强制路由转换 为 test8-2\r\n    @HttpGet('test8-2')\r\n    test8(): string {\r\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n@Controller()\r\nclass OtherController {\r\n    // 返回一个字符串 /other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 返回修改过的TestModel /other/test2\r\n    @HttpPost()\r\n    test2(@FromBody() body: TestModel): TestModel {\r\n        body.name += '-back'\r\n        body.value += '-back'\r\n        return body\r\n    }\r\n\r\n    // 一个方法同时支持多种类型的请求 /other/test3\r\n    @HttpGet()\r\n    @HttpPost()\r\n    @HttpDelete()\r\n    @HttpPatch()\r\n    @HttpHead()\r\n    @HttpPut()\r\n    test3(): TestModel {\r\n        return { name: 'n1', value: 'n2' }\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n// 指定控制器路由\r\n@Controller('api/other')\r\nclass Other2Controller {\r\n    // 返回一个字符串 /api/other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 指定方法路由为 /api/other/t\r\n    @HttpPost('t')\r\n    test2(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n\r\n### src-example\\di.ts 依赖注入示例\r\n\r\n```typescript\r\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\r\nimport Koa from 'koa'\r\n\r\ninterface IDep {\r\n    val(): number\r\n}\r\n\r\nabstract class Dep {\r\n    constructor() {}\r\n    abstract val(): number\r\n}\r\n\r\n// 声明一个依赖\r\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\r\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\r\nclass DepImpl extends Dep {\r\n    val(): number {\r\n        return Date.now()\r\n    }\r\n}\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 注入DepImpl\r\n    @Injection()\r\n    dep1!: DepImpl\r\n    // 注入抽象类Dep\r\n    @Injection()\r\n    dep2!: Dep\r\n    // 通过uniqueId查找对象注入IDep\r\n    @Injection({ uniqueId: 'DepImpl' })\r\n    dep3!: IDep\r\n\r\n    // 解析依赖DepImpl\r\n    dep4 = ResolveDependency(DepImpl)\r\n    // 解析依赖Dep\r\n    dep5 = ResolveDependency(Dep)\r\n    // 通过uniqueId，解析依赖IDep\r\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\r\n        arr.forEach(console.log) // 日志输出注入/解析对象\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.9","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-yqroVyd/v72BwT9eZcIGNecAXRSEP3sChRzll3smRz3XV29d0l9PTwXGk9Ji0+eoK2+L3be55b3rs6cmY3OVcg==","shasum":"d7f7ba6565ed25932e2d09d03dd42121ba95911e","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.9.tgz","fileCount":163,"unpackedSize":373422,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG4jFzcmQ1m51Q+e9y/Kr6GIHrljQGkLsfXActYd4s1KAiBlmi5/VPGuflo3bpYUqo2b3+WiDnynK31KfYkz98cRDg=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.9_1703946540802_0.1390378531399945"},"_hasShrinkwrap":false},"1.0.10":{"name":"@wangminghua/koa-restful","version":"1.0.10","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"types":"./dist/index.d.ts","gitHead":"ba5ecb32c9d1e5b1d7b02ebe7073ce2147368f13","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.10","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-UorAKmcZCacQQXapiPG/oX8MV+lin2mutyk9L6ZwYN80z8CRrMkFUgFOFCoOGCDXcPkgKkPA0Ns16G36viOR4Q==","shasum":"537f7c5f630ab354b8c17f76dd2f0ad1d82d24f8","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.10.tgz","fileCount":165,"unpackedSize":385520,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDd1632jn/c5m7T8VvcTfhAEcwDndTn3WpggOEiV4968AiBNh+jmO07wG7Sg/CNvRhhGb+cIze8VFgO7rH0bvIxKmQ=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.10_1703956982346_0.9565282213474515"},"_hasShrinkwrap":false},"1.0.11":{"name":"@wangminghua/koa-restful","version":"1.0.11","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/bodyparser":"^5.0.0","@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"types":"./dist/index.d.ts","gitHead":"5ee9be72114e78b8446c49ca2de24141b3b220b8","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.11","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-IQO5ZlIy3drSjFrK3B5bvlibYpyWF66FBb+JPBcKYbpggyg1IYiueExFxwFJaK8dWUQSZrQrTTuV3Ut38nfPtg==","shasum":"6bc8b1db86a0c3c9bf30baa7c8b2d57aecdf43f7","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.11.tgz","fileCount":165,"unpackedSize":385717,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1xKV7OCEf7KKacw7rLZnYI8CX/U6eghrYQldVjLelFgIhAMSrdkbzD1R+vj75rqgBF3ZH13sjrj4B+KAxwRYn9Gpw"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.11_1703958703883_0.019419906520569574"},"_hasShrinkwrap":false},"1.0.1-2.alpha.1":{"name":"@wangminghua/koa-restful","version":"1.0.1-2.alpha.1","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-body":"^6.0.1","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"types":"./dist/index.d.ts","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master\">查看Demo/在线测试</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 工程模板（快速启动器）\n\n[koa-restful-quick-start](https://github.com/WangMingHua111/koa-restful-quick-start)\n\n#### 在线测试\n\n传送门 [koa-restful-quick-start 在线测试](https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master)\n\n![传送门](https://github.com/WangMingHua111/koa-restful-quick-start/blob/master/image/codesandbox.png)\n\n### QQ 交流群\n\n![QQ交流群](https://github.com/wangminghua111/koa-restful/raw/master/images/QQ-KoaRestful.png)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"df3f4f33580287e232b8d0947b9a7828c0a718eb","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_id":"@wangminghua/koa-restful@1.0.1-2.alpha.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-so4y1gmRl29sv5q0Z08iBH9zK8c9of7AActRF+2M88oRXe1XyKBtBYWQQFvtZ3wbMvCROE9IrxaEVcPA/pE2fA==","shasum":"e3caa6fec32d5823648591972e4f9b48f8facb1f","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.1-2.alpha.1.tgz","fileCount":165,"unpackedSize":383402,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNYGsGnM+gV/TIPYEov1HlN1NW9SrrATfM2Sv6v/gqKQIhAKB3mcltTc+hBfoPya1Xnlo+Hl95bmiX6xmLtfGxwYXV"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.1-2.alpha.1_1704171450078_0.21325719935176068"},"_hasShrinkwrap":false},"1.0.1-2.alpha.2":{"name":"@wangminghua/koa-restful","version":"1.0.1-2.alpha.2","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/router":"^12.0.1","@types/koa":"^2.13.11","@types/koa-send":"^4.1.6","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-body":"^6.0.1","koa-compose":"^4.1.0","koa-send":"^5.0.1","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.1-2.alpha.2","readme":"# koa-restful\n\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\n\n<!-- PROJECT SHIELDS -->\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n <!-- links -->\n\n[your-project-path]: wangminghua111/koa-restful\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\n\n<!-- PROJECT LOGO -->\n<br />\n\n<p align=\"center\">\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a>\n\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\n  <p align=\"center\">\n    一个\"超简单\"的Restful快速开始你的项目！\n    <br />\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master\">查看Demo/在线测试</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\n    ·\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\n  </p>\n\n</p>\n\n## 上手指南\n\n### 依赖\n\n```sh\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n```\n\n### 开发前的配置要求\n\n1. Node 版本要求 >= 16\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\n\n### 运行仓库 demo\n\n```sh\n# 克隆源码仓库\ngit clone https://github.com/WangMingHua111/koa-restful.git\n\n# 进入工作目录\ncd koa-restful\n\n# npm插入依赖\nnpm install\n\n# 构建dist、dist-example、README.md\nnpm run build-all\n\n# 运行示例\nnpm run run-simple\n\n```\n\n### 工程创建\n\n#### 创建工程目录\n\n```sh\n# 你的工程名称\nmkdir simple-api\n# 进入项目目录\ncd simple-api\n# npm 初始化，执行npm初始化流程\nnpm init\n# 安装 koa 和 koa-restful\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\n# 执行typescript配置文件初始化\nnpx tsc --init\n```\n\n#### 工程模板（快速启动器）\n\n[koa-restful-quick-start](https://github.com/WangMingHua111/koa-restful-quick-start)\n\n#### 在线测试\n\n传送门 [koa-restful-quick-start 在线测试](https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master)\n\n![传送门](https://github.com/WangMingHua111/koa-restful-quick-start/blob/master/image/codesandbox.png)\n\n### QQ 交流群\n\n![QQ交流群](https://github.com/wangminghua111/koa-restful/raw/master/images/QQ-KoaRestful.png)\n\n## 示例代码\n\n### src-example\\simple.ts 常用示例\n\n```typescript\n// src-example/simple.ts\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\nimport Koa, { Context } from 'koa'\n\n// 测试类型\ntype TestModel = { name: string; value: string }\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n\n    // 获取查询参数\n    @HttpGet()\n    test2(@FromQuery() name: string): string {\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\n    }\n\n    // 获取路径参数\n    @HttpGet('test3/:id')\n    test3(@FromRoute() id: string): string {\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\n    }\n\n    // 读取路径参数和查询参数\n    @HttpGet('test4/:id')\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\n    }\n\n    // 第一个参数默认为Koa Context\n    @HttpGet('test5/:id')\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\n    }\n\n    // 方法参数名称不匹配时，指定从固定参数读取\n    @HttpGet('test6/:id')\n    test6(@FromRoute('id') id2: string): string {\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\n    }\n\n    // 从请求头读取token参数\n    @HttpGet()\n    test7(@FromHeader() token: string): string {\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\n    }\n    // 强制路由转换 为 test8-2\n    @HttpGet('test8-2')\n    test8(): string {\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n@Controller()\nclass OtherController {\n    // 返回一个字符串 /other/test1\n    @HttpPost()\n    test1(): string {\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 返回修改过的TestModel /other/test2\n    @HttpPost()\n    test2(@FromBody() body: TestModel): TestModel {\n        body.name += '-back'\n        body.value += '-back'\n        return body\n    }\n\n    // 一个方法同时支持多种类型的请求 /other/test3\n    @HttpGet()\n    @HttpPost()\n    @HttpDelete()\n    @HttpPatch()\n    @HttpHead()\n    @HttpPut()\n    test3(): TestModel {\n        return { name: 'n1', value: 'n2' }\n    }\n}\n\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\n// 指定控制器路由\n@Controller('api/other')\nclass Other2Controller {\n    // 返回一个字符串 /api/other/test1\n    @HttpPost()\n    test1(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n    // 指定方法路由为 /api/other/t\n    @HttpPost('t')\n    test2(): string {\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n\n### src-example\\di.ts 依赖注入示例\n\n```typescript\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\nimport Koa from 'koa'\n\ninterface IDep {\n    val(): number\n}\n\nabstract class Dep {\n    constructor() {}\n    abstract val(): number\n}\n\n// 声明一个依赖\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\nclass DepImpl extends Dep {\n    val(): number {\n        return Date.now()\n    }\n}\n\n// 创建 GET 请求控制器（仅支持类）\n@Controller()\nclass GetController {\n    // 注入DepImpl\n    @Injection()\n    dep1!: DepImpl\n    // 注入抽象类Dep\n    @Injection()\n    dep2!: Dep\n    // 通过uniqueId查找对象注入IDep\n    @Injection({ uniqueId: 'DepImpl' })\n    dep3!: IDep\n\n    // 解析依赖DepImpl\n    dep4 = ResolveDependency(DepImpl)\n    // 解析依赖Dep\n    dep5 = ResolveDependency(Dep)\n    // 通过uniqueId，解析依赖IDep\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\n    // 返回一个字符串\n    @HttpGet()\n    test1(): string {\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\n        arr.forEach(console.log) // 日志输出注入/解析对象\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\n    }\n}\n\nconst app = new Koa()\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\napp.listen(3000) // 创建 http://localhost:3000\n\nconsole.log('启动成功，3秒后执行 restful api 请求。')\nconsole.log('http://localhost:3000')\n```\n","readmeFilename":"README.md","gitHead":"df3f4f33580287e232b8d0947b9a7828c0a718eb","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-uko6l9JPK5MqBRqU7QoyRHEFhNxytV1Jzz92goLOV6/rPYHmv3I6R1dvFsc+a7huTsageVs0403M+MVBbMQXRg==","shasum":"d6ab8ef42cfd300992f8a1fe6acffe589685a418","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.1-2.alpha.2.tgz","fileCount":165,"unpackedSize":384720,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAwPdXzFk+hh3ou2NPMpmhCWRXKu27w4++cdOcSQvW/oAiBIIUejUPMC5hobKq4/nfpREMqc+2R5e7A5KFODyQoTFw=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.1-2.alpha.2_1704289102909_0.16137044778335086"},"_hasShrinkwrap":false},"1.0.12":{"name":"@wangminghua/koa-restful","version":"1.0.12","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.2","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-body":"^6.0.1","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.12","gitHead":"d541b444ae4e298e8ac4adde37a3f6c865246764","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-h+CHG14eDPjAUme5lpS6GxFnoZz0hZ1NyVrUNCQ0ccKEfbA0BTCQGCa9wVsMR8drDLZpEFFPwYj7kT680fehgA==","shasum":"5c3b9bf40d7999a734eb1514ace820dba49a50aa","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.12.tgz","fileCount":165,"unpackedSize":385484,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3uN7QTvvJTgD/neUV66mefBk/FSxfcJICHC3ukz+ClwIhAJ48BuJOkydBeoNhcAaKA5JxJ6J8rzESBSJC7asmzm8E"}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.12_1704291798062_0.9812512113798173"},"_hasShrinkwrap":false},"1.0.13":{"name":"@wangminghua/koa-restful","version":"1.0.13","description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","main":"./dist/index.js","scripts":{"build":"rimraf -rf ./dist && npx tsc -p tsconfig.dist.json","build-example":"rimraf -rf ./dist-example && npx tsc -p tsconfig.example.json","build-extra":"rimraf -rf ./extra && npx tsc -p tsconfig.extra.json","build-all":"npm run build && npm run build-example && npm run build-extra","run-example":"node ./dist-example/simple.js","run-example-ts":"ts-node ./src-example/simple.ts","run-di":"node ./dist-example/di.js","run-di-ts":"ts-node ./src-example/di.ts","run-openapi-ts":"ts-node ./src-example/openapi.ts","run-extra-ts":"ts-node ./src-example/extra.ts","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs"},"author":{"name":"wangminghua"},"license":"ISC","dependencies":{"@koa/router":"^12.0.1","@types/koa":"^2.13.11","@wangminghua/di":"^0.0.6","jsonwebtoken":"^9.0.2","koa":"^2.14.2","koa-body":"^6.0.1","koa-compose":"^4.1.0","lodash-es":"^4.17.21","openapi-types":"^12.1.3","reflect-metadata":"^0.1.13","ts-morph":"^21.0.1","typescript":"^5.2.2"},"devDependencies":{"@types/koa__router":"^12.0.4","@types/koa-compose":"^3.2.8","@wangminghua/koa-restful":"file:./","axios":"^1.5.0","chalk":"^4.1.2","rimraf":"^5.0.5","ts-node":"^10.9.1","vitepress":"^1.0.0-rc.30"},"repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=16"},"_id":"@wangminghua/koa-restful@1.0.13","gitHead":"43b3366341327fc9495f8b1a524ed1f8307a1c1f","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"homepage":"https://github.com/WangMingHua111/koa-restful#readme","_nodeVersion":"20.11.0","_npmVersion":"10.2.1","dist":{"integrity":"sha512-+vDqWM4Sn66p00hroox4DKWS8UyYwsZTDxvje6XQhYc6MDt4IKk2y2iLAZbN4ZTkKT1nVciTLZ1vyOX1sn5E9g==","shasum":"dc94d4e4cc74d97dcfd19965698b94765849e6ee","tarball":"https://registry.npmjs.org/@wangminghua/koa-restful/-/koa-restful-1.0.13.tgz","fileCount":173,"unpackedSize":10473178,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6F2M/SfF9zeXWJeNZSAcPpq/3rP0fdViI5QezYyLVAAiAmgF6b9J07agVdatjDPzLUKPEr+xGpcsBdBxRf3gbijA=="}]},"_npmUser":{"name":"wangminghua1","email":"735161977@qq.com"},"directories":{},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/koa-restful_1.0.13_1705755567830_0.09015114663930501"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-10T16:42:59.388Z","0.1.1":"2023-11-10T16:42:59.641Z","modified":"2024-01-20T12:59:28.334Z","0.1.2":"2023-11-11T01:49:26.309Z","0.1.3":"2023-11-15T02:43:37.054Z","0.2.1":"2023-12-01T17:21:39.739Z","0.2.2":"2023-12-10T16:50:32.399Z","0.2.3":"2023-12-11T05:17:57.252Z","0.2.4":"2023-12-11T15:47:16.239Z","0.2.5":"2023-12-13T18:22:51.506Z","0.2.6":"2023-12-15T06:22:21.782Z","1.0.0-alpha.1":"2023-12-15T18:06:50.669Z","1.0.0-alpha.2":"2023-12-15T18:21:56.506Z","1.0.0-alpha.3":"2023-12-16T04:37:57.174Z","1.0.0-alpha.4":"2023-12-16T12:20:55.040Z","1.0.0-alpha.5":"2023-12-16T13:29:00.983Z","1.0.0-alpha.6":"2023-12-16T14:53:58.534Z","1.0.1":"2023-12-16T14:58:56.993Z","1.0.2":"2023-12-16T16:32:37.502Z","1.0.3-alpha.1":"2023-12-17T07:36:01.246Z","1.0.3":"2023-12-17T08:18:27.627Z","1.0.4":"2023-12-17T08:44:45.752Z","1.0.5":"2023-12-17T10:18:59.052Z","1.0.6":"2023-12-17T10:39:32.318Z","1.0.7":"2023-12-19T12:21:15.181Z","1.0.8":"2023-12-25T10:50:21.240Z","1.0.9":"2023-12-30T14:29:01.112Z","1.0.10":"2023-12-30T17:23:02.545Z","1.0.11":"2023-12-30T17:51:44.089Z","1.0.1-2.alpha.1":"2024-01-02T04:57:30.226Z","1.0.1-2.alpha.2":"2024-01-03T13:38:23.119Z","1.0.12":"2024-01-03T14:23:18.296Z","1.0.13":"2024-01-20T12:59:28.174Z"},"maintainers":[{"name":"wangminghua1","email":"735161977@qq.com"}],"description":"Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。","homepage":"https://github.com/WangMingHua111/koa-restful#readme","repository":{"type":"git","url":"git+https://github.com/WangMingHua111/koa-restful.git"},"author":{"name":"wangminghua"},"bugs":{"url":"https://github.com/WangMingHua111/koa-restful/issues"},"license":"ISC","readme":"# koa-restful\r\n\r\nKoa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库，使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务。\r\n\r\n<!-- PROJECT SHIELDS -->\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n\r\n <!-- links -->\r\n\r\n[your-project-path]: wangminghua111/koa-restful\r\n[contributors-shield]: https://img.shields.io/github/contributors/wangminghua111/koa-restful.svg?style=flat-square\r\n[contributors-url]: https://github.com/wangminghua111/koa-restful/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/wangminghua111/koa-restful.svg?style=flat-square\r\n[forks-url]: https://github.com/wangminghua111/koa-restful/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/wangminghua111/koa-restful.svg?style=flat-square\r\n[stars-url]: https://github.com/wangminghua111/koa-restful/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg?style=flat-square\r\n[issues-url]: https://img.shields.io/github/issues/wangminghua111/koa-restful.svg\r\n\r\n<!-- PROJECT LOGO -->\r\n<br />\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://github.com/wangminghua111/koa-restful/\">\r\n    <img src=\"https://github.com/wangminghua111/koa-restful/raw/master/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\r\n  </a>\r\n\r\n  <h3 align=\"center\">\"超简单\"的 Restful Api</h3>\r\n  <p align=\"center\">\r\n    一个\"超简单\"的Restful快速开始你的项目！\r\n    <br />\r\n    <a href=\"https://wangminghua111.github.io/koa-restful/\"><strong>探索本项目的文档 »</strong></a>\r\n    <br />\r\n    <br />\r\n    <a href=\"https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master\">查看Demo/在线测试</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">报告Bug</a>\r\n    ·\r\n    <a href=\"https://github.com/wangminghua111/koa-restful/issues\">提出新特性</a>\r\n  </p>\r\n\r\n</p>\r\n\r\n## 上手指南\r\n\r\n### 依赖\r\n\r\n```sh\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n```\r\n\r\n### 开发前的配置要求\r\n\r\n1. Node 版本要求 >= 16\r\n2. 项目源码必须使用 typescript 编写，并设置 `tsconfig.json` 的 `compilerOptions.experimentalDecorators` 和 `compilerOptions.emitDecoratorMetadata` 为 `true`\r\n\r\n### 运行仓库 demo\r\n\r\n```sh\r\n# 克隆源码仓库\r\ngit clone https://github.com/WangMingHua111/koa-restful.git\r\n\r\n# 进入工作目录\r\ncd koa-restful\r\n\r\n# npm插入依赖\r\nnpm install\r\n\r\n# 构建dist、dist-example、README.md\r\nnpm run build-all\r\n\r\n# 运行示例\r\nnpm run run-simple\r\n\r\n```\r\n\r\n### 工程创建\r\n\r\n#### 创建工程目录\r\n\r\n```sh\r\n# 你的工程名称\r\nmkdir simple-api\r\n# 进入项目目录\r\ncd simple-api\r\n# npm 初始化，执行npm初始化流程\r\nnpm init\r\n# 安装 koa 和 koa-restful\r\nnpm install reflect-metadata koa @wangminghua/koa-restful typescript\r\n# 执行typescript配置文件初始化\r\nnpx tsc --init\r\n```\r\n\r\n#### 工程模板（快速启动器）\r\n\r\n[koa-restful-quick-start](https://github.com/WangMingHua111/koa-restful-quick-start)\r\n\r\n#### 在线测试\r\n\r\n传送门 [koa-restful-quick-start 在线测试](https://codesandbox.io/p/github/WangMingHua111/koa-restful-quick-start/master)\r\n\r\n![传送门](https://github.com/WangMingHua111/koa-restful-quick-start/blob/master/image/codesandbox.png)\r\n\r\n### QQ 交流群\r\n\r\n![QQ交流群](https://github.com/wangminghua111/koa-restful/raw/master/images/QQ-KoaRestful.png)\r\n\r\n## 示例代码\r\n\r\n### src-example\\simple.ts 常用示例\r\n\r\n```typescript\r\n// src-example/simple.ts\r\nimport { Controller, FromBody, FromHeader, FromQuery, FromRoute, HttpDelete, HttpGet, HttpHead, HttpPatch, HttpPost, HttpPut, KoaRestful } from '@wangminghua/koa-restful'\r\nimport Koa, { Context } from 'koa'\r\n\r\n// 测试类型\r\ntype TestModel = { name: string; value: string }\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n\r\n    // 获取查询参数\r\n    @HttpGet()\r\n    test2(@FromQuery() name: string): string {\r\n        return `GetController test2 = ${new Date().toLocaleTimeString()} name = ${name}`\r\n    }\r\n\r\n    // 获取路径参数\r\n    @HttpGet('test3/:id')\r\n    test3(@FromRoute() id: string): string {\r\n        return `GetController test3 = ${new Date().toLocaleTimeString()} id = ${id}`\r\n    }\r\n\r\n    // 读取路径参数和查询参数\r\n    @HttpGet('test4/:id')\r\n    test4(@FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test4 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name}`\r\n    }\r\n\r\n    // 第一个参数默认为Koa Context\r\n    @HttpGet('test5/:id')\r\n    test5(ctx: Context, @FromRoute() id: string, @FromQuery() name: string): string {\r\n        return `GetController test5 = ${new Date().toLocaleTimeString()} id = ${id} name = ${name} ip = ${ctx.request.ip}`\r\n    }\r\n\r\n    // 方法参数名称不匹配时，指定从固定参数读取\r\n    @HttpGet('test6/:id')\r\n    test6(@FromRoute('id') id2: string): string {\r\n        return `GetController test6 = ${new Date().toLocaleTimeString()} id = ${id2}`\r\n    }\r\n\r\n    // 从请求头读取token参数\r\n    @HttpGet()\r\n    test7(@FromHeader() token: string): string {\r\n        return `GetController test7 = ${new Date().toLocaleTimeString()} token = ${token}`\r\n    }\r\n    // 强制路由转换 为 test8-2\r\n    @HttpGet('test8-2')\r\n    test8(): string {\r\n        return `GetController test8 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n@Controller()\r\nclass OtherController {\r\n    // 返回一个字符串 /other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 返回修改过的TestModel /other/test2\r\n    @HttpPost()\r\n    test2(@FromBody() body: TestModel): TestModel {\r\n        body.name += '-back'\r\n        body.value += '-back'\r\n        return body\r\n    }\r\n\r\n    // 一个方法同时支持多种类型的请求 /other/test3\r\n    @HttpGet()\r\n    @HttpPost()\r\n    @HttpDelete()\r\n    @HttpPatch()\r\n    @HttpHead()\r\n    @HttpPut()\r\n    test3(): TestModel {\r\n        return { name: 'n1', value: 'n2' }\r\n    }\r\n}\r\n\r\n// 创建 其他类型 请求控制器（仅支持类）, 路由参数、查询参数、请求头参数使用方法于GetController一致\r\n// 指定控制器路由\r\n@Controller('api/other')\r\nclass Other2Controller {\r\n    // 返回一个字符串 /api/other/test1\r\n    @HttpPost()\r\n    test1(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n    // 指定方法路由为 /api/other/t\r\n    @HttpPost('t')\r\n    test2(): string {\r\n        return `Other2Controller test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n\r\n### src-example\\di.ts 依赖注入示例\r\n\r\n```typescript\r\nimport { Controller, Dependency, HttpGet, Injection, KoaRestful, ResolveDependency, ResolveDependencyFromUniqueId } from '@wangminghua/koa-restful'\r\nimport Koa from 'koa'\r\n\r\ninterface IDep {\r\n    val(): number\r\n}\r\n\r\nabstract class Dep {\r\n    constructor() {}\r\n    abstract val(): number\r\n}\r\n\r\n// 声明一个依赖\r\n// 等效于 AddDependency(new DepImpl(), { alias: [Dep], uniqueId: 'DepImpl' }) ， AddDependency 不支持singleton\r\n@Dependency({ alias: [Dep], lifecycle: 'singleton', uniqueId: 'DepImpl' })\r\nclass DepImpl extends Dep {\r\n    val(): number {\r\n        return Date.now()\r\n    }\r\n}\r\n\r\n// 创建 GET 请求控制器（仅支持类）\r\n@Controller()\r\nclass GetController {\r\n    // 注入DepImpl\r\n    @Injection()\r\n    dep1!: DepImpl\r\n    // 注入抽象类Dep\r\n    @Injection()\r\n    dep2!: Dep\r\n    // 通过uniqueId查找对象注入IDep\r\n    @Injection({ uniqueId: 'DepImpl' })\r\n    dep3!: IDep\r\n\r\n    // 解析依赖DepImpl\r\n    dep4 = ResolveDependency(DepImpl)\r\n    // 解析依赖Dep\r\n    dep5 = ResolveDependency(Dep)\r\n    // 通过uniqueId，解析依赖IDep\r\n    dep6 = ResolveDependencyFromUniqueId<IDep>('DepImpl')\r\n    // 返回一个字符串\r\n    @HttpGet()\r\n    test1(): string {\r\n        const arr: Array<IDep | undefined> = [this.dep1, this.dep2, this.dep3, this.dep4, this.dep5, this.dep6]\r\n        arr.forEach(console.log) // 日志输出注入/解析对象\r\n        return `GetController test1 = ${new Date().toLocaleTimeString()}`\r\n    }\r\n}\r\n\r\nconst app = new Koa()\r\napp.use(KoaRestful({ logs: true })) // 使用 KoaRestful 插件\r\napp.listen(3000) // 创建 http://localhost:3000\r\n\r\nconsole.log('启动成功，3秒后执行 restful api 请求。')\r\nconsole.log('http://localhost:3000')\r\n```\r\n","readmeFilename":"README.md"}