{"id":13672832,"url":"https://github.com/Koatty/koatty","last_synced_at":"2025-04-28T03:33:06.282Z","repository":{"id":38408343,"uuid":"131427005","full_name":"Koatty/koatty","owner":"Koatty","description":"Koa2 + Typescript = Koatty. Use Typescript's decorator implement IOC and AOP.","archived":false,"fork":false,"pushed_at":"2025-04-19T15:07:28.000Z","size":5245,"stargazers_count":126,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-19T19:06:46.397Z","etag":null,"topics":["aop","auto-injection","grpc","grpc-server","http","http2","https","ioc","koa","koa2","middleware","rpc","springboot","typescript","typescript-decorator","websocket","ws"],"latest_commit_sha":null,"homepage":"https://koatty.org/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Koatty.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-04-28T16:44:15.000Z","updated_at":"2025-03-15T15:12:52.000Z","dependencies_parsed_at":"2023-02-10T07:35:16.580Z","dependency_job_id":"fe09ae38-5ee7-4871-b197-fab5a7448458","html_url":"https://github.com/Koatty/koatty","commit_stats":{"total_commits":1411,"total_committers":4,"mean_commits":352.75,"dds":"0.017717930545712246","last_synced_commit":"2b4d1e052de529789f98f56c56aa7729fbd18965"},"previous_names":["thinkkoa/koatty"],"tags_count":116,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koatty%2Fkoatty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koatty%2Fkoatty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koatty%2Fkoatty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koatty%2Fkoatty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Koatty","download_url":"https://codeload.github.com/Koatty/koatty/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250573354,"owners_count":21452350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aop","auto-injection","grpc","grpc-server","http","http2","https","ioc","koa","koa2","middleware","rpc","springboot","typescript","typescript-decorator","websocket","ws"],"created_at":"2024-08-02T09:01:50.617Z","updated_at":"2025-04-28T03:33:01.271Z","avatar_url":"https://github.com/Koatty.png","language":"TypeScript","funding_links":[],"categories":["仓库","TypeScript"],"sub_categories":["框架"],"readme":"# koatty\n\nKoa2 + Typescript + IOC = koatty. \n\nUse Typescript's decorator implement IOC and AOP.\n\n[![Version npm](https://img.shields.io/npm/v/koatty.svg?style=flat-square)](https://www.npmjs.com/package/koatty)[![npm Downloads](https://img.shields.io/npm/dm/koatty.svg?style=flat-square)](https://npmcharts.com/compare/koatty?minimal=true)\n\n## New features \n\n* HTTP、HTTPS、HTTP2、gRPC、WebSocket server.✔️\n* Support loading environment configuration, parsing command line parameters (process.argv) and environment variables (process.env).✔️\n* `@ExceptionHandler()` Register global exception handling.✔️\n* graceful shutdown and pre-exit event.✔️\n* custom decorator based on app events.✔️\n* GraphQL supporting. 💪\n* Multi-protocol server. 💪\n\n\n## Documentation\n\n[koatty_doc_CN](https://koatty.org/) （In progress💪）\n\n\n## Installation CLI tools\n\n```shell\nnpm i -g koatty_cli\n```\n\n## Quick Start\n\n### 1.Create Project\n\n```shell\nkt new projectName\n\n```\n\n### 2. Install deps\n\n```\ncd ./projectName\n\nnpm i\n```\n\n### 3. Start up\n\n```\nnpm run dev\n\n// or\nnpm start\n```\n\n## Code style\n\ndefault Controller:\n\n```javascript\nimport { Controller, Autowired, GetMapping, RequestBody, PathVariable,\n PostMapping, RequestMapping, RequestMethod, Valid, Output } from \"koatty\";\nimport { TestDTO } from \"../model/dto/TestDTO\";\nimport { TestService } from \"../service/TestService\";\nimport { App } from \"../App\";\n\n@Controller()\nexport class IndexController {\n    app: App;\n    ctx: KoattyContext;\n\n    @Autowired()\n    private testService: TestService;\n\n    /**\n     * constructor\n     *\n     */\n    constructor(ctx: KoattyContext) {\n        this.ctx = ctx;\n    }\n\n    @RequestMapping(\"/:name\", RequestMethod.ALL)\n    async default(@PathVariable(\"name\") @Valid(\"IsNotEmpty\") name: string) {\n        try {\n            const info = await this.testService.sayHello(name);\n            return Output.ok(this.ctx, \"success\", info);\n        } catch (err: Error) {\n            return Output.fail(this.ctx, err.message));\n        }\n    }\n\n    @PostMapping(\"/test\")\n    @Validated() //need DTOClass\n    test(@RequestParam() params: TestDTO) {\n        return Output.ok(this.ctx, \"test\", params);\n    }\n}\n```\n\n## How to do Unit Testing\n\n\u003eonly support `jest` UT framework now \n\n```javascript\nimport request from 'supertest';\nimport { ExecBootStrap } from 'koatty';\nimport { App } from '../src/App';\n\ndescribe('UT example', () =\u003e {\n\n  let server: any;\n  beforeAll(async () =\u003e {\n    jest.useFakeTimers();\n    const appInstance = await ExecBootStrap()(App);\n    server = await appInstance.listen();\n  });\n\n  afterAll(done =\u003e {\n    server.close();\n    done();\n  });\n\n  it('request', async () =\u003e {\n    const rsp = await request(server).get('/');\n    expect(rsp.status).toBe(200);\n  });\n});\n\n```\n\n## How to debug\n\nif you use vscode , edit the `.vscode/launch.json` , like this: \n```\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"node\",\n            \"request\": \"launch\",\n            \"name\": \"TS Program\",\n            \"args\": [\n                \"${workspaceRoot}/src/App.ts\" \n            ],\n            \"runtimeArgs\": [\n                \"--nolazy\",\n                \"-r\",\n                \"ts-node/register\"\n            ],\n            \"sourceMaps\": true,\n            \"cwd\": \"${workspaceRoot}\",\n            \"protocol\": \"inspector\",\n            \"outputCapture\": \"std\",\n            \"internalConsoleOptions\": \"neverOpen\"\n        }\n    ]\n}\n```\nSelect `TS Program` to debug run. Try to call `http://localhost:3000/` .\n\n## Example\n\nCheck out the [quick start example][quick-example].\n\n[quick-example]: https://github.com/Koatty/koatty_template\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKoatty%2Fkoatty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKoatty%2Fkoatty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKoatty%2Fkoatty/lists"}