{"id":15363165,"url":"https://github.com/techquery/mvkoa","last_synced_at":"2025-07-14T17:08:59.473Z","repository":{"id":40747945,"uuid":"185545548","full_name":"TechQuery/MVKoa","owner":"TechQuery","description":"Node.JS back-end framework based on Koa 2 \u0026 ECMAScript Decorator proposal","archived":false,"fork":false,"pushed_at":"2023-01-03T21:42:33.000Z","size":1157,"stargazers_count":3,"open_issues_count":13,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T18:50:56.272Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://tech-query.me/MVKoa/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TechQuery.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-08T06:31:19.000Z","updated_at":"2024-08-19T19:41:18.000Z","dependencies_parsed_at":"2023-02-01T10:15:56.064Z","dependency_job_id":null,"html_url":"https://github.com/TechQuery/MVKoa","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechQuery%2FMVKoa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechQuery%2FMVKoa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechQuery%2FMVKoa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechQuery%2FMVKoa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TechQuery","download_url":"https://codeload.github.com/TechQuery/MVKoa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249041453,"owners_count":21203102,"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":[],"created_at":"2024-10-01T13:04:58.290Z","updated_at":"2025-04-15T09:25:28.385Z","avatar_url":"https://github.com/TechQuery.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MVKoa\n\nNode.JS back-end framework based on [Koa 2][1] \u0026 [ECMAScript Decorator proposal][2]\n\n[![NPM Dependency](https://david-dm.org/TechQuery/MVKoa.svg)](https://david-dm.org/TechQuery/MVKoa)\n[![Build Status](https://travis-ci.com/TechQuery/MVKoa.svg?branch=master)](https://travis-ci.com/TechQuery/MVKoa)\n\n[![NPM](https://nodei.co/npm/mvkoa.png?downloads=true\u0026downloadRank=true\u0026stars=true)](https://nodei.co/npm/mvkoa/)\n\n## Basic usage\n\n### Core logic\n\n[`source/UserController.js`][3]\n\n([`source/User.js`][4] is a [`Model` class][5])\n\n```javascript\nimport KoaController, { GET, PATCH, POST } from 'mvkoa';\n\nimport { User } from './User';\n\nexport default class UserController extends KoaController {\n    @GET()\n    listAll() {\n        return [];\n    }\n\n    @PATCH('/:id')\n    extend(context, id, body) {\n        return { id, ...body };\n    }\n\n    @POST('/', User)\n    create(context, body) {\n        return body.valueOf();\n    }\n}\n```\n\n`source/index.js`\n\n```javascript\nimport KoaController from 'mvkoa';\nimport bodyParser from 'koa-bodyparser';\nimport mount from 'koa-mount';\n\nimport UserController from './UserController';\n\nconst app = new KoaController()\n    .use(async (context, next) =\u003e {\n        try {\n            await next();\n        } catch ({ message }) {\n            (context.status = 500), (context.body = message);\n        }\n    })\n    .use(bodyParser())\n    .use(mount('/users', new UserController()));\n\napp.listen(() =\u003e console.log(`Server run at ${app.address}`));\n```\n\n### Installation\n\n```shell\nnpm init\n\nnpm install \\\n    mvkoa \\\n    koa-bodyparser \\\n    koa-mount \\\n    data-scheme \\\n    @babel/polyfill \\\n    @babel/runtime\n\nnpm install \\\n    @babel/cli \\\n    @babel/core \\\n    @babel/preset-env \\\n    @babel/plugin-proposal-decorators \\\n    @babel/plugin-transform-runtime\n```\n\n### Configuration\n\n`package.json`\n\n```json\n{\n    \"scripts\": {\n        \"build\": \"babel source/ -d dist/ -s\",\n        \"start\": \"node dist/\"\n    },\n    \"engines\": {\n        \"node\": \"^7.6.0\"\n    },\n    \"babel\": {\n        \"presets\": [\n            [\n                \"@babel/preset-env\",\n                {\n                    \"targets\": {\n                        \"node\": \"7.6.0\"\n                    }\n                }\n            ]\n        ],\n        \"plugins\": [\n            [\n                \"@babel/plugin-proposal-decorators\",\n                {\n                    \"decoratorsBeforeExport\": true\n                }\n            ],\n            \"@babel/plugin-transform-runtime\"\n        ]\n    }\n}\n```\n\n### Bootstrap\n\n```shell\nnpm run build\n\nnpm start\n```\n\n## Advanced usage\n\nhttps://tech-query.me/MVKoa/manual/\n\n[1]: https://koajs.com/\n[2]: https://github.com/tc39/proposal-decorators/tree/master/previous#readme\n[3]: https://tech-query.me/MVKoa/test-file/test/source/UserController.js.html\n[4]: https://tech-query.me/MVKoa/test-file/test/source/User.js.html\n[5]: https://tech-query.me/DataScheme/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechquery%2Fmvkoa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechquery%2Fmvkoa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechquery%2Fmvkoa/lists"}